Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Relacja 1 do wielu czy inna?
Forum PHP.pl > Forum > Bazy danych > MySQL
Delleg
Witajcie jestem początkujący w temacie baz danych, do tej pory tworzyłem wyłącznie szablony dla Joomla i Wordpress, ale do rzeczy. Chce w swoim nowym projekcie - stronie www na bazie Bootstrapa wykorzystać własną bazę danych MySQL. Ma być to prosty katalog produktów, w którym będzie można wyszukiwać produkty po podaniu odpowiednich cech, coś na wzór Allegro. W telegraficznym skrócie: mam tabelę produkt, a w niej nazwę, wysokość, szerokość, opis. Ów produkt jest z różnych rodzajów drewna, może być również okleinowany jednocześnie musi być przypisany do jednej z sześciu kategorii. Tym samym dodatkowe trzy tabele tj. kategoria, materiał oraz okleina. 1. Cze lepiej wsadzić wszystko do jednej tabeli (320 produktów), czy lepiej rozdzielić na większą ilość tabel według podanego schematu (lub innego)?. 2. Jeśli tak to jakiego rodzaju powinna być to relacja, ponieważ mam dylemat jako początkujący. Z punku widzenia produktu jest to relacja "wiele do 1" tzn. wiele produktów posiada tylko jedną okleinę i jeden rodzaj drewna oraz jedną kategorie do której jest przypisany. 2. Moja wiedza na temat baz danych opiera się o MS Access, a tam jak wiadomo do stworzenia relacji wymagany był klucz ID w każdej tabeli należącej do relacji, do stworzenia wspomnianej bazy danych użyłem Workbench-a. W diagramie EER chce stworzyć tę relację, zasadnicze pytanie i prośba jednocześnie wyjaśnijcie mi proszę czy w tabeli produkt powinienem umieścić klucze z pozostałych tabeli reasumując:
Produkt
  1. CREATE TABLE IF NOT EXISTS `polishcoffins`.`product` (
  2. `idproduct` INT NOT NULL AUTO_INCREMENT,
  3. `name` VARCHAR(100) NULL,
  4. `height` TINYINT(100) NULL,
  5. `width` TINYINT(100) NULL,
  6. `length` TINYINT(100) NULL,
  7. `image` VARCHAR(45) NULL,
  8. `thumbnail` VARCHAR(45) NULL,
  9. PRIMARY KEY (`idproduct`))
  10. ENGINE = InnoDB

Okleina
  1. CREATE TABLE IF NOT EXISTS `polishcoffins`.`veneer` (
  2. `veneer` VARCHAR(45) NULL)
  3. ENGINE = InnoDB
  4. COMMENT = ' '

kategoria
  1. CREATE TABLE IF NOT EXISTS `polishcoffins`.`category` (
  2. `category` VARCHAR(45) NULL)
  3. ENGINE = InnoDB

Materiał
  1. CREATE TABLE IF NOT EXISTS `polishcoffins`.`substance` (
  2. `substance` VARCHAR(45) NULL)
  3. ENGINE = InnoDB
grzes999
Jeżeli produkt może mieć dokłądnie jedną kategorię, okleinę i materiał to wystarczą te tabele, które podałeś w innym przupadku potrzebna będzie tabela normalizująca czyli np. product_has_material. W tabeli produkt musisz umieścić klucze do pozostałych tabel. W przypadku skorzystania z tabeli normalizującej nie bedzie klucza w tabeli Produkt i będzie wyglądąć następująco:

id
product_id
material_id
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.