Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak dobrze zaprojektować bazę danych?
Forum PHP.pl > Forum > Bazy danych > MySQL
radabus
Niby case jest banalny, ale mi sprawia sporo problemów. Baza ma obsługiwać kontenerowiec wraz z zawartością - liczba kontenerów jest zmienna (może się zdarzyć, że ktoś doda lub zabierze jakąś ilość kontenerów), każdy kontener może mieć zmienną zawartość (też może przyjść klient i kupić coś lub dołożyć do kontenera jakiś przedmiot), a oprócz tego niezależny opis (również "edytowalny").

Na początku myślałem, żeby stworzyć 2 tabele, jedna z listą kontenerów i ich opisami, druga z ich zawartością, ale to nie bardzo wychodzi (przecież zmienna by była zarówno ilość kolumn jak i wierszy). Może ktoś podpowiedzieć, jak dobrze zaprojektować taką bazę danych? Czy może zrobić tak, że jedna tabela będzie zbierała listę wszystkich kontenerów (id, opis), a dla każdego kontenera będzie tworzona oddzielna tabela wraz z zawartością (dodawanie i odejmowanie wierszy przy stałej liczbie kolumn)? Ja się trochę w tym wszystkim gubię, wdzięczny byłbym za pomoc.
erix
Cytat
zbierała listę wszystkich kontenerów (id, opis), a dla każdego kontenera będzie tworzona oddzielna tabela wraz z zawartością (dodawanie i odejmowanie wierszy przy stałej liczbie kolumn)?

Sam sobie odpowiedziałeś na pytanie. wink.gif
radabus
Ale jak je poprawnie powiązać? Tabele dla każdego kontenera mają się nazywać tak, jak ich identyfikatory w tabeli zbiorczej? Właśnie tu się zacinam, jak to zrobić, żeby potem w prosty sposób móc wyciągnąć zawartość żądanego kontenera wraz z opisem.

Jeszcze tak siedząc po nocy, zacząłem się zastanawiać nad innym rozwiązaniem. Stworzyć 2 tabele: pierwsza będzie zawierać spis wszystkich kontenerów (kolumny: id_kontenera, opis_kontenera), druga będzie "wielką" tabelą przedmiotów z kluczem obcym odwołującym się do konkretnego kontenera (kolumny: id_przedmiotu, nazwa_przedmiotu, id_kontenera) - w końcu dany przedmiot może znajdować się tylko w jednym kontenerze.

Które rozwiązanie jest lepsze - to z 2 tabelami, czy z jedną tabelą zbiorczą i osobnymi tabelami dla każdego kontenera?
cojack
radabus - widać że masz problem z zrozumieniem relacji, jeżeli produkt może należeć tylko do jednego kontenera to mamy relację jeden do jeden, jest to najprostsza relacja jaką świat widział. Także sytuacja Ci się upraszcza. Tworzysz jedną tabelę z listą kontenerów, każdy z kontenerów ma na pewno unikatowy identyfikator w życiu, oprócz tego może mieć i równie dobrze w bazie. Także jak to sobie zaimplementujesz Twoja brocha. Druga tabela będzie tabelą produktów, każdy produkt musi mieć identyfikator kontenera by wiedzieć, który gdzie przynależy. No i nie zapomnij o bazie kontenerowców wink.gif Przecież musisz wiedzieć jaki kontener na jaki statek załadować.

Pozdrawiam.
radabus
Dzięki, zaczynam już kojarzyć co i jak. Muszę też się doszkolić w podstawach relacyjnych baz danych, bo widać mam spore braki wink.gif

Przy okazji - jakby ktoś był w stanie polecić porządny manual (w sensie: trochę łopatologiczny), byłoby miło. Na razie jadę z książką w ręku.
cojack
Jest takowa, nazywa się tworzenie baz i ciągła nauka na swoich lub cudzych błędach, polecam jeszcze blog: www.depesz.com.

Pozdrawiam.
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.