Podkategoria dla kategorii danego przedmiotu

0

Czy jeśli chcę utworzyć np kategorię samochody i dla niej podkategorie części samochodowe i jeszcze kilka innych to rozbić to na dwie tabele w bazie danych? Czy jest możliwość zrobienia tego w jednej tabeli?

0

W jednej.

0

Czyli w jednej ma być id podkategorii i to będzie klucz główny, nazwę podkategorii, id kategorii i nazwe kategorii? Czy jakoś inaczej?

0

id, nazwa_kategorii, id_kategorii_nadrzednej

0

A gdzie nazwa kategorii podrzednej?

0

I tak samo klucz główny jest tylko jeden np o id = 1, więc jeśli jakaś kategoria ma id = 1 to dla niej później w jaki sposób dodać następną kategorię nadrzędną skoro tak?

0

@Marcin.Miga: A czemu proponujesz zrobienie tego w jednej tabeli, zamiast rozbicie na kilka?
Moim zdaniem takie rozwiązanie wprowadzi bałagan i zamieszanie - lepiej dla osobnych typów danych stosować osobne tabele.

Nawiązując do przykładu podanego przez OP - samochód może posiadać kilka cech (marka, kolor, ilość drzwi, silnik, rok produkcji, czy posiada klimę itp.), z kolei części zamienne kilku z tych pół nie będą posiadać, za to dodadzą swoje parametry (np. kod produktu, oryginał czy zamiennik, waga). Dodatkowo - część z nich będzie posiadać cechy, których nie będą miały inne (np. lewa/prawa w wypadku lampy, prąd rozruchowy w wypadku akumulatora, wersja wykończenia wnętrza w wypadku klamki do drzwi itp.).
Wrzucanie tego wszystkiego do jednego wora spowoduje po pierwsze powstanie bałaganu, a po drugie - albo utratę część z w/w parametrów, albo powstanie dziesiątek czy setek pól, w których w zdecydowanej większości pozycji niczego nie będzie wpisanego. No i konieczność modyfikacji tabeli ze wszystkim w wielu sytuacjach - np. dodając nowy typ produktu, który posiada nieistniejące dotychczas parametry.

Wyjaśnij proszę, dlaczego Twoim zdaniem wrzucenie tego w jedną tabelę jest lepszą opcją, niż stworzenie ich większej ilości - takiej, aby dało się jakoś sensownie pogrupować elementy z podobnymi cechami, a następnie te tabele ze sobą powiązać. I żeby była jasność - pytam nie w formie ataku, ale żeby się czegoś nauczyć. Mam pewne pojęcie o bazach, ale nie uważam się za eksperta - dlatego chętnie się dowiem czegoś nowego :)

0

Kategorie w jednej tabeli. I żadne z dodatkowych pól nie jest potrzebne:

id;nazwa_kategorii;id_kategorii_nadrzednej
1;alkohole;null
2;wysokoprocentowe;1
3;średnio i nisko procentowe;1
4;wódki;2
5;likiery;2
6;buron;2
7;gin;2
8;wódki smakowe;4
9;likiery;2
10;ajerkoniak;9
11;wina;3
12;gronowe;11
13;owocowe;11
14;piwa;3
15;jasne;14
16;ciemne;14

@cerrato to o czym piszesz, to już nie są kategorie, a cechy(właściwości) i są zupełnie odrębne od kategorii.
Kategoria samochodu to 'osobowy" - nie posiada wartości.
Cecha o nazwie "kolor" już posiada i jest nią np. "czerwony"

0

Czyli teraz jeśli stworzyłbym jeszcze dodatkową tabelę produkt i np. dodał tam wódkę wyborowa i do tego cenę to jako klucz obcy by musiał być ten id z tabeli kategorii? Czyli w tym przypadku id = 4?

Zastanawia mnie teraz jednak fakt jak kategorie i podkategorie oddzielnie pobrać do dropdowna? Jakby kategoria i podkategoria była rozbite na dwie tabele to by to było łatwiejsze.

0

Wydaję mi się, że w przypadku jednej tabeli kategorii z podkategoriami jest niemożliwe pobranie kategorii do jednego dropdowna, a podkategorii do drugiego dropdowna.

0

Jakby kategoria i podkategoria była rozbite na dwie tabele

Zwróć uwagę na poziom zagłębienia - w podanym przez @Marcin.Miga przykładzie masz więcej niż 1 stopień zagłębienia.
Poza tym jest to do zrobienia, ale wymaga pewnej "gimnastyki" - albo po stronie SQL, albo pobierasz wszystko i sobie samemu rozbijasz na poziome aplikacji.

0

To jeśli kategorię i podkategorię chcę pobrać do oddzielnych dropdownów to lepiej darować jedną tabelę i zrobić dwie jeśli jestem dosyć początkujący?

1

Ale zauważ, że jak pisałem w poprzednim poście - jeśli masz większy stopnień zagłębienia (przykładowo: alkohole->wina->smakowe->wiśniowe) to robiąc to tak, jak chcesz musiałbyś mieć dla każdego poziomu osobną tabelę (z drugiej strony - mając to w jednej, musisz trochę pokombinować, żeby to rozbić na poszczególne składowe)

A jeśli tylko interesuje Cie jeden poziom, to jedna tabela wystarczy i nie wymaga żadnych skomplikowanych zabiegów. Zauważ, że w podanym przez Marcina przykładzie, kat. "alkohole" (czyli główna) ma w polu "id_kategorii_nadrzednej" wartość null. W ten prosty sposób możesz (przy jednym stopniu zagłębienia) prosto odfiltrować kategorie główne oraz podkategorie. Jeśli "rodzic" jest null, to mamy do czynienia z kategorią główną, natomiast jeśli jest tam podane jakieś ID, to znaczy że dana pozycja jest podkategorią podłączoną pod rodzica z danym ID.

0

Faktycznie dla jednego poziomu zagłębienia jest to do zrobienia aby na jednej tabeli odfiltrować kategorie od podkategorii.

1 użytkowników online, w tym zalogowanych: 0, gości: 1