Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem koncepcyjny bazy danych
Forum PHP.pl > Forum > Bazy danych
Riggs
Witam,
otóż chce stworzyć katalog specyficznych produktów. Produkty nie są z jednej branży także mają różne właściwości. Problemem jest dla mnie przechowywanie tych produktów w bazie gdyż chcę później robić zestawienia np. sprzedaży wg użytkownika, produktu itd. Mój pomysł jest następujący:
Tabela określająca typ produktu:

TYPY
+ id
+ nazwa
+ opis

Tabela zawierajaca zdefiniowane produkty (grupy usług w systemie)

PRODUKTY
+ id
+ typ_id
+ nazwa
+ opis

i teraz mam problem z ewidencją produktów. Czy dla każdego _typu_ produktu tworzyć osobne tabele np. ProduktA, ProduktB, ProduktC? Czy też stworzyć tabelę Produkty gdzie będę miał dużo pól NULL dla różnych typów produktów? Pierwsze podejście wydaje się być prawidłowe ale np na tą chwilę nie wiem jak zrobić zestawienie wg uzytkownika który sprzedawał różne typy produktów... Czy zrobić dodatkową tabelę w której przechowam typ_id, produkt_id, user_id i za jej pomocą robić złączenia?

Proszę o pomoc bo nie chcę popełnić błędu już przy projektowaniu bazy bo może to utrudnić modyfikację aplikacji.
Lysiur
Problem przechowywania takich danych jest dość złożony i zależy jak dużo będziesz miał podtypów produktów, jak często będziesz robił takie zestawienie, jak często i w jakiej ilości będą rozszerzane podtypy produktów.

Rozsądznie byłoby zrobić:

PRODUKTY
+ id_produkty (PK)
+ id_typ_produkty // może się przydać dla zliczania rodzajów (o ile Ci potrzebne)
+ nazwa
+ opis
+ inne wspólne cechy (cena, etc)

PRODUKTY_TV
+ id_produkty (FK)
+ przekątna
+ kolor
+ other pola

PRODUKTY_KSIĄZKI
+ id_produkty (FK)
+ autor
+ tytuł
+ other pola

PRODUKTY_OTHER
+ .....

USER_PRODUKTY
id_user
id_produkty

W takim rozwiązaniu możesz wyłonić i np.: wyświetlić wszystkie produkty sprzedawane (na podstawie podstawowych danych PRODUKTY), a po wejściu w szczegóły wyświetlić specyficzne wartości dla poszczególnego typu.

Trochę więcej roboty będzie jeśli będziesz chciał np.: wyszukiwać później prodykty spełniające spólne cechy np.: dla dwóch podtypów. (radio -> kolor black, tv->kolor black). I teraz wyszukujesz po kolorze o_x.

Każde rozwiązanie ma swoje zalety i wady niestety.

Z kolei przechowywanie wszsytkich podtypów w jednej zbiorczej tabeli, ułatwi wyszukiwanie po specyficznych typach, ale jeżli każdy podtyp ma sporo różnych atrybutów to powstanie ładny mix i szybko przestanie być użyteczny.
Riggs
Faktycznie wciągnięcie wspólnych danych do tabeli produkty będzie chyba optymalnym rozwiązaniem gdyż ułatwi robienie zestawień. Tabele osobne dla produktów z cechami specyficznymi dla danego produktu też powinny zdać egzamin. Wyszukiwania po tych cechach chyba nie będzie a nawet jeśli to da się to jakoś zaimplementować w miarę logicznie.
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.