2013-01-31 14 views
8

Robię projekt e-commerce i mam wątpliwości co do projektu bazy danych do przechowywania produktów. Istnieją 3 sposoby, na które spekulowałem, że można utworzyć bazę danych:Projektowanie bazy danych E-Commerce - MySQL

1. Dla każdej kategorii produktów mogą być oddzielne tabele.

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. Grupa wszystkie produkty razem w jednej tabeli i umożliwiają pewne wartości do być 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. Grupa pól podobna kolumna razem w tabeli o nazwie produktów i zapewnić oddzielne tabele dla określone dane.

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?) 

będę naprawdę wdzięczny oświecenie, dziękuję

Odpowiedz

8

Zakładam, że produkt może należeć do wielu kategorii, a kategoria (oczywiście) zawiera wiele produktów. Ta relacja jest nazywana relacją wiele do wielu.

W tym przypadku masz trzy tabele: categories, products i categories_products. Pierwsze dwie tabele są oczywiste. Trzecia tabela przechowuje relację między dwoma kluczami obcymi. Tabele wyglądałyby tak:

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; 

Oczywiście są to schematy stołów w najprostszych. Konieczne będzie dodanie dodatkowych kolumn do tabeli categories i products. Uwzględniono tylko kolumny odpowiadające relacji.

EDYCJA: Dodałem także kolumnę parent_id do tabeli categories dla kategorii zagnieżdżania. Generalnie nie jest dobrym pomysłem utworzenie oddzielnej tabeli sub_categories - co się stanie, jeśli chcesz, aby podkategoria była kategorią najwyższego poziomu? Lub odwrotnie? Jesteś zbuntowany z powodu braku lepszego zdania.

+0

Dziękuję za pomoc. Moim głównym problemem jest to, jak/gdzie przechowywać różne dane dla różnych rodzajów produktów. To znaczy. czy miałbyś kolumnę dla autorów/ISBN/koloru/rozmiarów/wagi/itd. w tabeli produktów, czy oddzieliłbyś je, aby uniknąć wartości pustych? – a7omiton

+0

Chciałbym mieć podstawową tabelę "produktów", a następnie może tabelę "product_attributes" dla dodatkowych danych, takich jak numery ISBN, a nie każdy produkt będzie miał numer ISBN, jeśli nie jest publikacją. –

+0

A więc metoda 3 byłaby drogą do wyjścia (poza tabelą sub_categories)? Czy możesz powiedzieć, że każdy atrybut dla wszystkich produktów powinien być umieszczony w tabeli product_attributes? – a7omiton

5

myślę, że to zależy od produktów użyć metody 1 lub 2. Nigdy nie używać metody 3.

Jeśli produkty są całkowicie odmienne jak książki, perfumy i ubrania. Użyłbym metody 1

Jedna strona: Dlaczego warto używać 2 tabel dla swoich kategorii? Użyj jednej tabeli i dodaj kolumnę Parent_ID w taki sposób, aby w przyszłości móc korzystać z nieograniczonej liczby podkategorii.

na przykład:

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  | 
  • Książki, Odzież pl perfumy nie mają rodziców (są głównymi kategorie).
  • Sci-Fi and Comedy to podkategoria książek (ID 1).
  • Dżinsy, sweter i bielizna to podkategoria odzieży (ID 2).
  • Długi rękaw to podkategoria swetra (ID 7).
  • Róże to podkategoria perfum (ID 3).
+0

można wyjaśnić trochę dalej na przykładzie identyfikatora nadrzędnego –

+2

Zmieniono moją odpowiedź na przykładzie identyfikatora nadrzędnego. Mam nadzieję, że rozumiesz, co mam na myśli – AgeDeO

+0

ooh kumpel Wiesz, że skończyłem z moją stroną i przechodzę przez skomplikowane sposoby Użyłem metody 1, aby utworzyć mój koszyk oh luc, dlaczego nie zrobiłbym tego przed stworzeniem mojej strony doceniłem twój wysiłek i głosowania, dziękuję –

Powiązane problemy