Mình đang làm đồ án năm I ... Vấn đề giao diện thì ổn nhưng giờ phải làm bảng mô tả CSDL và ERD để nộp ... Trang web của mình có cùng sản phẩm tương đương như www.maydientu.com Nhưng khi thiết kế ra các bảng CSDL trong database thì gặp rắc rối chút ... Mình chả biết bảng Danhmục phân ra thế nào và hàng hóa của mình gồm cả Console , linh kiện và đĩa game thì bảng Item sẽ có các thuộc tính thế nào .. Có phải disc game ko có các thuộc tính như Console thì sẽ để Null hôn .. khó nghĩ quá . Bạn nào từng thiết kế CSDL tương tự thì cho mình cái ERD tham khảo với , rất cám ơn.
Có gì đâu mà phải băn khoăn thế bạn ::) Nếu bạn có ý định làm như trang trên thì phải tạo : Bảng Categories , SubCategories , Products (tôi lấy ví dụ) Categories : tương ứng với mục Hàng Hóa + Game SubCategories : tương ứng với mặt hàng như PS2 , PS3 , XBOX v.v.. Products : là món hàng có trong sub . VD : trong mục PS2 có sản phẩm kí hiệu X100002 , X100003 v.v.. Vậy khi khai báo cho table cần những trường gì ? Categories : - CategoryID int primary key identity(1,1) // trường CategoryID có kiểu dữ liệu là int , khóa chính và tự động nhập số tịnh tiến - CategoryName (hoặc Name) nvarchar (50) // trường Name có kiểu dữ liệu là nvarchar max 50 kí tự - Status bit // trường Status có kiểu dữ liệu là bit (0 và 1) dùng để tạo trạng thái cho danh mục (khi Status = 0 thì danh mục ẩn , = 1 thì hiện ra ngoài website , cái này bạn phải code) Command : insert into Categories values(N'Hàng hóa',1) // bạn có thể ko cần nhập 1 nếu đặt default value cho nó SubCategories - SubCateID int primary key identity(1,1) - CategoryID int - SubName varchar(50) - Status bit Command : insert into SubCategories values(1, 'PlayStation 3',1) // số 1 màu đỏ ở đây ko phải là ID của SubCateID mà là ID của CategoryID vì ta để mục PlayStation 3 ở trong Hàng hóa mà ^^ Products - ProductID int primary key identity(1,1) // tùy bạn để kiểu int hay varchar - SubCateID int - Name varchar (50) // tên sản phẩm - Serries varchar (50) // đời máy - Distributor varchar (50) // nhà sản xuất - Feature nvarchar (200) // tính năng - Price numberic or char (10) // giá tiền - Warranty char (10) // bảo hành - ..... Đối với các loại linh kiện hay console bạn cứ insert theo bảng trên hoặc chèn thêm trường là ok . Còn đối với đĩa game khi select ra chỉ cần select tên sản phẩm , tính năng ~ mô tả và giá tiền là được . Các trường cứ tạm để null ko sao cả Chúc bạn bảo vệ project suôn sẻ ^^
OKie , cám ơn bạn ... Mình đang phân tích lại... Nhưng vẫn có vài chỗ khó hiểu , chiều mình sẽ up sơ đồ quan hệ thực thể đang làm của mình và chỉnh sửa của bạn rồi hỏi vài cái lun .. Thank
Đây là sơ đồ ERD tổng quan qua của mình ( thiết kế trên access trước đã ) : http://www.mediafire.com/?t30m5dimkin Tổng quan thì đc rồi , ko biết dữ liệu nhập thế này đã phù hợp chưa và trường Status dùng làm gì , mình cũng định dùng menu động ???
Mình thấy CSDL của bạn cũng ổn rồi đấy . Còn với trường Status theo mình là rất cần thiết VD : - Đối với menu của website . Việc bạn tạo thêm trường Status với kiểu dữ liệu là bit (0 và 1) thì bạn có thể ẩn hoặc hiện menu của category , sub or product (nếu 1 sản phẩm , 1 danh mục ko còn được bày bán) . - Bạn cũng nên tạo thêm trường Status có kiểu dữ liệu là int cho table Order . Theo nghiệp vụ của một website về thương mại điện tử . Khi khách hàng đặt hàng thì ở trang Admin sẽ có hóa đơn của người khách hàng đó . Nếu " Chưa xử lí " thì status = 0 và khách hàng có thể xóa sản phẩm trong giỏ hàng . Nếu khách hàng kết thúc giao dịch , người quản trị vào trang Admin và chuyển hóa đơn sang trạng thái " Đang xử lí " thì khách hàng ko thể xóa giao địch đó . Còn nếu chuyên qua trang thái "Đã xử lí" thì người quản trị sẽ ko được xóa hóa đơn đó và sản phẩm đã được giao dịch . - Status = 0 -> "Chưa xử lí" -> Khách hàng có thể xóa , thêm sản phẩm trong giỏ hàng hoặc hủy bỏ giao dịch - Status = 1 -> "Đang xử lí" -> Khách hàng ko thể thực hiện việc hủy bỏ giao dịch . Người quản trị trong trường hợp này có thể xóa hóa đơn nếu giao dịch khi nhận hàng , v.v... ko thực hiện được . - Status = 2 -> "Đã xử lí" -> Giao dịch đã thực hiện thành công và người quản trị sẽ ko có quyền xóa hóa đơn .
Có 3 điều cần rất cơ bản cần fix lại: 1. Nhìn vào cái CSDL đặt tên gì mà Anh Việt lẫn lộn như thế là giảng viên đã cảm thấy khó chịu rồi. Y_Y. Đặt tên theo Anh hay Việt thì theo 1 thứ thôi nhìn cho nó đồng bộ chứ. Hơn nữa đã dùng tiếng Anh không nên viết tắt. Từ có dài 1 chút cũng nên viết hết ra. 2. Order và OrderDetails nhập làm 1 --> vì không cần thiết tự nhiên chia ra làm 2, không được mục đích gì cả. 3.Product và NhaSX nhập làm một --> vì tạo 1 bảng chỉ gồm 2 cái ID, không có lợi gì thêm trong việc quản lý, và đương nhiên là chả cần thiết phải làm thế.
YeuBeNhiu nhầm rồi CSDL của chủ topic demo trên là đc . Chỉ cần chỉnh sửa , thêm một số trường nữa thôi . 1. Order và OrderDetails phải chỉa 2 bảng khác nhau là chính xác . 2. Việc trường NhaXS để trong bảng Product cũng được nhưng làm thế khi nhập dữ liệu sẽ tốn thời gian nhập đi nhập lại tên NhaXS cho sản phẩm . Cho NhaXS riêng 1 bảng để khi nhập dữ liệu gán dữ liệu trường NXS vào comboBox (hay SelectBox ... lâu rồi ko nhớ ASP dùng gì) -> đỡ mất công nhập hết Sony đến Microsoft 3. Như YEN73 nói ấy , chủ topic ko nên tạo CSDL lẫn lộn giữa E và V . Tên trường gán khóa chính hay khóa phụ phải giống nhau để tạo tính toàn vẹn cho dữ liệu // Tất nhiên việc để sao cho thuận tiện là do chủ topic . Bạn cố gắng điều chỉnh chút cho sau này đỡ vất vả
Cám ơn các bạn , vấn đề đặt tên thì mình sẽ sửa lại khi làm thật . Còn cái Order Và OrderDetail thì vì khách hàng và Hóa đơn là quan hệ N-N nên phải tạo ra thêm 1 bảng theo quy tắc chuẩn hóa CSDL mà .. Cái NSX thì mình cũng nghĩ vậy ... Vì chỉ có xung quanh mấy hãng chính thôi .
Uh, cái này tùy theo hướng thiết kế của mỗi người. Còn cái vụ quan hệ Many-Many thì chia ra là đúng. Nhưng mà tại sao quan hệ giữa KHách Hàng và Đặt hàng lại là Many-Many ??? Làm gì có chuyện 1 Đặt hàng do nhiều khách hàng cung cấp ? 1 KHách hàng nhiều đặt hàng. 1 đặt hàng chỉ có 1 khách hàng. Còn cái chuyện tạo 1 bảng NhaSX mà chỉ có 1 cái khóa chính, 1 cái thì là ID của bảng khác điều này là hoàn toàn không cần thiết. Nó càng làm tăng thêm sự phức tạp mà không giúp ích được gì cả. Tạo ra 1 bảng dùng để lưu trữ dữ liệu, mục đích không phải để làm việc nhập liệu đơn giản. Nếu muốn ComboBox có thể sổ ra 1 loạt các ID của nhà SX lúc code chỉ việc thêm vào. Nếu đã tạo cái bảng NhaSX thì ít ra cũng phải thêm 1 số cột như Tên, Địa chỉ, Điện thoại, ....nếu muốn quản lý luôn dữ liệu của NhaSX. Tạo ra 1 cái bảng mà chỉ gồm 2 cái ID nhìn vào là cảm thấy không cần thiết rồi. Đem suy nghĩ lúc mà nhập liệu để mà thiết kế CSDL càng là 1 sai lầm lớn. VIệc nhập liệu phải dựa trên CSDL. Khi thiết kế ứng dụng (web) phải dựa trên CSDL chứ không phải là ngược lại. Thôi, dù sao việc thiết kế CSDL cũng như ứng dụng (web) là chuyện ý tưởng sáng tạo của từng người. Vô tình thấy nên góp ý thế thôi. Good luck. -------------------- À rồi quên nữa, tạo ra cái bảng NhaSX gồm 2 cột MaNhaSX và MaSP. Vây cái cột MaSP bạn tính dùng lưu trữ cái gì vậy ? Lưu tất cả các sản phẩm của nhà SX đó vào àh ???? Hiện tại mình vẫn chưa hiểu bạn tạo ra cái bảng đó làm gì Y_Y. Phải chăng trình độ mình quá kém. Thậm chí cả việc chia ra làm 2 bảng Đặt hàng và Chi Tiết đặt hàng mình cũng chả hiểu để làm gì nữa. Viêc tạo cái bảng NhaSX chỉ thật sự cần thiết khi bạn cần lưu trữ 1 số thông tin về các nhà sx mà bạn thường hay liên hệ, chứ không phải chỉ để lưu trữ cái mã sp (mà việc lưu trữ ma sp là điều mình chưa hiểu nổi bạn sẽ lưu kiểu gì, toàn bộ mã sp đưa vào trong 1 cột ư ?) , hoàn toàn vô ích.
Do chủ topic viết nhầm đấy thôi . Chứ trong bảng NhaSX phải có trường : MaSX , Ten , TrangThai Còn việc thêm NhaSX vào ComboBox như cậu nói thì chẳng lẽ lúc đưa website lên Internet rồi . Cậu muốn thêm nhà SX mới thì phải sửa lại trong code à Một là cậu nhập = tay , 2 là cậu tạo CSDL + code để tự động hóa cái đấy đi . Chả có gì là phức tạp hay rắc rối cả .
Cái gì cũng là nhầm cả ? Thế thì góp ý chả có tác dụng gì rồi. Góp ý cái gì cũng bảo là nhầm. Mà tôi góp ý với chủ topic, sao cái ông [L]at lại cứ vào mà nói cứ y như mình là chủ topic thế nhỉ ? Còn cái chuyện sửa code cũng không có gì gọi là lạ đâu. Rồi còn chuyện comboBox, thế bạn không biết việc tạo 1 comboBox mà vẫn cho nhập vào àh ??? Tôi cũng đã nói rất là rõ ràng, tôi góp ý dựa trên cái sơ đồ của ông kia, ổng tạo 1 bảng mà chỉ có 2 cái ID, tôi nhìn vào là cảm thấy không cần thiết rồi. Còn việc tạo cái bảng NhaSX để mà quản lý dữ liệu thì tôi cũng đã nói cần phải thêm vào một số cột. Mà thôi, góp ý thế là đủ rồi. Không muốn phải vào đây mà cãi nhau toàn những điều mà ai nhìn vào cũng thấy.
Bạn đừng giận Forum là nơi mọi người trao đổi cho nhau cùng tiến bộ . Tôi chưa phải là giỏi giang gì , còn nhìu điều chưa nắm rõ hết . Bạn góp ý cho chủ topic có rất nhìu ý kiến đúng nhưng chưa thấu đáo . Chẳng hạn như cái ComboBox . Nếu dữ liệu bạn nhập vào là mặc định (vd : phân quyền cho tài khoản - Admin , Manager, User) thì chả cần phải tạo thêm bảng trong CSDL , cứ add text như bạn nói . Nhưng đối với những dữ liệu có thể thường xuyên thay đổi hoặc thỉnh thoảng thì nên tạo thêm bảng cho chính trường ấy . Việc select ko có gì là khó khăn cả . - Cái tiện lợi thứ 1 : bạn ko mất công gõ đi gõ lại dữ liệu cần nhập đối với mỗi sản phẩm - Cái tiện lợi thứ 2 : bạn có thay đổi dữ liệu được lấy ra trong comboBox . VD : nhà sản xuất đó giải tán , bạn ko còn nhập hàng cho hãng đó nữa v.v... Những cái này chỉ là phần nhỏ của lập trình . Nhưng nếu vô tình hiểu sai cũng gây khó chịu cho người dùng . @YêuBéNhìu : góp ý cho người khác cũng như góp ý cho mình . P/s : ai lập topic thảo luận về lập trinh đi . Mình cũng đang có một vài vấn đề cần hỏi về ASP.NET , RMI và Remoting
Ơ , các bạn đừng cãi nhau nữa , là do mình nhầm thôi ... Mục đích chính là mình chỉ hỏi về cái Danh Mục thôi , giờ mình đã làm xong ERD roài , ý kiến của các bạn mình đã tiếp thu hết Còn cái chỗ bạn YeuBeNhiu thắc mắc vì sao quan hệ giữa Customer và Hóa Đơn là nhiều nhiều thì mình giải thích lun , là cái trên kia mình lại nói nhầm , còn cái bảng trên kia thì đúng , quan hệ giữa Hóa Đơn và Sản Phẩm mới là nhiều nhiều và sinh ra 1 bảng Chi Tiết là tất yêu thôi :whew: @[L]at : Thế là ổn roài , có gì đến phần Thi Công mình sẽ hỏi tiếp , cám ơn bạn