2013-01-31 65 views
8

Tôi đang thực hiện một dự án thương mại điện tử và đang bối rối về thiết kế cơ sở dữ liệu để lưu trữ sản phẩm. Có 3 cách tôi đã suy đoán cơ sở dữ liệu có thể được thực hiện:Thiết kế Cơ sở dữ liệu thương mại điện tử - MySQL

1. Có thể có các bảng riêng biệt cho từng danh mục sản phẩm.

Table: Categories 
------------------ 
cat_ID 
cat_name 

Table: Sub_Categories 
--------------------- 
sub_cat_ID 
categories_cat_ID 
sub_cat_name 

Table: Books 
------------- 
book_ID 
sub_categories_sub_cat_ID 
book_title 
book_author 
book_ISBN 
book_price 
etc 

Table: Clothes 
--------------- 
clothes_ID 
sub_categories_sub_cat_ID 
clothes_name 
clothes_color 
clothes_size 
clothes_description 
clothes_price 
etc 

Table: Perfumes 
---------------- 
perfumes_ID 
sub_categories_sub_cat_ID 
perfume_name 
perfume_size 
perfume_weight 
perfume_description 
perfume_price 
etc 

2. Nhóm tất cả các sản phẩm với nhau trong một bảng và cho phép một số giá trị là null

Table: Categories 
------------------ 
cat_ID 
cat_name 

Table: Sub_Categories 
--------------------- 
sub_cat_ID 
categories_cat_ID 
sub_cat_name 

Table: Products 
--------------- 
product_ID 
sub_categories_sub_cat_ID 
title 
description 
price 
author (can be null for everything except books) 
size 
weight (can be null for everything except perfumes) 
ISBN (can be null for everything except books) 
color (can be null for everything except clothes) 
etc 

3. Nhóm lĩnh vực cột tương tự với nhau trong một bảng gọi là sản phẩm, và cung cấp các bảng riêng biệt cho dữ liệu cụ thể.

Table: Categories 
------------------ 
cat_ID 
cat_name 

Table: Sub_Categories 
--------------------- 
sub_cat_ID 
categories_cat_ID 
sub_cat_name 

Table: Products 
---------------- 
product_ID 
sub_categories_sub_cat_ID 
title 
description 
price 

Table: Books 
------------- 
products_product_id 
sub_categories_sub_cat_ID 
author 
publisher 
ISBN 

Table: Perfumes 
---------------- 
products_product_id 
sub_categories_sub_cat_ID 
size 
weight 

Table: Clothes 
-------------- 
products_product_id 
sub_categories_sub_cat_ID 
color 
size (this can be a one to many relationship to cater to multiple sizes of one product?) 

Tôi thực sự sẽ đánh giá cao sự giác ngộ, cảm ơn bạn

Trả lời

8

Tôi giả định một sản phẩm có thể thuộc về nhiều danh mục và một danh mục (hiển nhiên) có nhiều sản phẩm trong đó. Mối quan hệ này được gọi là mối quan hệ nhiều-nhiều.

Trong trường hợp này, bạn sẽ có ba bảng: categories, productscategories_products. Hai bảng đầu tiên là tự giải thích. Bảng thứ ba lưu trữ một mối quan hệ giữa hai với hai khóa ngoài. Các bảng sẽ trông như sau:

CREATE TABLE `categories` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `parent_id` int(10) unsigned DEFAULT NULL, 
    `name` varchar(45) NOT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `name` (`name`), 
    KEY `parent_id` (`parent_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

CREATE TABLE `categories_products` (
    `category_id` int(10) unsigned NOT NULL, 
    `product_id` int(10) unsigned NOT NULL, 
    KEY `category_id` (`category_id`), 
    KEY `product_id` (`product_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

CREATE TABLE `products` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `name` varchar(45) NOT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `name` (`name`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

ALTER TABLE `categories_products` 
    ADD CONSTRAINT `categories_products_ibfk_2` 
    FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) 
    ON DELETE CASCADE ON UPDATE CASCADE, 
    ADD CONSTRAINT `categories_products_ibfk_1` 
    FOREIGN KEY (`category_id`) REFERENCES `categories` (`id`) 
    ON DELETE CASCADE ON UPDATE CASCADE; 

Rõ ràng đây là các lược đồ bảng đơn giản nhất. Bạn sẽ cần phải thêm các cột bổ sung của mình vào bảng categoriesproducts — Tôi chỉ bao gồm các cột có liên quan đến mối quan hệ.

EDIT: Tôi cũng đã thêm một cột parent_id vào bảng categories cho các danh mục lồng nhau. Bạn nên tạo một bảng sub_categories riêng biệt — điều gì sẽ xảy ra nếu bạn muốn tạo danh mục con thành danh mục cấp cao nhất? Hoặc ngược lại? Bạn bị lỗi vì muốn có cụm từ tốt hơn.

+0

Cảm ơn sự giúp đỡ của bạn. Vấn đề chính của tôi là cách/nơi lưu trữ dữ liệu khác nhau cho các loại sản phẩm khác nhau. I E. bạn sẽ có một cột cho tác giả/ISBN/màu/kích cỡ/trọng lượng/etc tất cả trong bảng sản phẩm hoặc bạn sẽ tách chúng ra để tránh giá trị null? – a7omiton

+0

Tôi sẽ có một bảng 'sản phẩm' cơ sở và sau đó có thể là bảng' product_attributes' cho dữ liệu bổ sung như số ISBN và không phải mọi sản phẩm đều có số ISBN nếu nó không phải là ấn phẩm. –

+0

Vì vậy, phương pháp 3 sẽ là con đường để đi (ngoài bảng sub_categories)? Hay bạn đang nói rằng mọi thuộc tính cho tất cả các sản phẩm phải được đặt trong bảng product_attributes? – a7omiton

5

Tôi nghĩ rằng nó phụ thuộc vào các sản phẩm để sử dụng phương pháp 1 hoặc 2. Tôi sẽ không bao giờ sử dụng phương pháp 3.

Nếu sản phẩm của bạn là hoàn toàn khác nhau như Sách, Nước hoa và Quần áo Tôi sẽ sử dụng phương pháp 1

Một phụ trang: Tại sao sử dụng 2 bảng cho mục đích của bạn? Sử dụng một bảng và thêm cột Parent_ID theo cách đó bạn có thể sử dụng các danh mục phụ không giới hạn trong tương lai.

ví dụ:

table: categories 

|id|description|parentid| 
|1 |books  |NULL | 
|2 |clothes |NULL | 
|3 |perfumes |NULL | 
|4 |Sci-Fi  |1  | 
|5 |Comedy  |1  | 
|6 |Jeans  |2  | 
|7 |Sweater |2  | 
|8 |Underwear |2  | 
|9 |Long sleeve|7  | 
|10|Roses  |3  | 
  • Sách, Quần áo en Nước hoa không có cha mẹ (đó là những chính loại).
  • Khoa học viễn tưởng và hài kịch là một danh mục phụ của Sách (ID 1).
  • Quần bò, áo len và đồ lót là một danh mục phụ của quần áo (ID 2).
  • Long Sleeve là danh mục con của Sweater (ID 7).
  • Hoa hồng là danh mục phụ của nước hoa (ID 3).
+0

bạn có thể giải thích thêm chút ít với ví dụ về id mẹ –

+2

Đã chỉnh sửa câu trả lời của tôi bằng ví dụ về id mẹ. Tôi hy vọng bạn hiểu những gì tôi có trong tâm trí – AgeDeO

+0

ooh bạn biết tôi đang thực hiện với trang web của tôi và tôi đi qua những cách phức tạp tôi đã sử dụng phương pháp 1 để tạo giỏ hàng của tôi oh luc lý do tại sao tôi sẽ không có trước khi tạo trang web của tôi đánh giá cao nỗ lực của bạn và bầu bạn cảm ơn –