![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 2 Dołączył: 17.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
Męczę się nad (raczej banalnym) problemem z normalizacją bazy danych. Idea jest taka, że doszedłem już do poziomu, gdzie mam tabelę z akcjami, każda akcja ma jakąś kategorię. Kategorie mogą być 2 rodzajów: główne i podrzędne, użytkownicy sobie sami wymyślają kategorie i je dodają, usuwają, modyfikują.
Jako że jedna (sub)kategoria może przynależeć do wielu użytkowników, a jeden użytkownik może mieć wiele (sub)kategorii, to mam w tym przypadku relację wiele-do-wielu, myślałem więc utworzyć stworzyć 2 tabele, jedna dla kategorii, druga dla subkategorii, po czym sprząc je tabelą pomocniczą, jak to w relacjach wiele-do-wielu się niby robi. I tu leży pies pogrzebany. Jeśli użytkownik Kowalski doda kategorię Abcd, która będzie mieć subkategorie Bcd oraz Bef, to może się przecież zdarzyć, że przyjdzie Nowak i doda sobie kategorię Xyz, która będzie miała subkategorie Uwx oraz Bcd - to w tym momencie wysypuje się idea, bo subkategoria Bcd ma 2 nadrzędne. Wracając do początku mógłbym na upartego dać jedną tabelę dla kategorii i drugą dla subkategorii, w której będzie występowała redundancja, nazwy będą się powtarzać - wszystkie będą miały przypisanego jednego użytkownika i nie będzie zgrzytów, np. tak: Kod id nazwa użytkownik kat_nadrzędna 1 Bcd [Kowalski] Abcd 2 Bef [Kowalski] Abcd 3 Uwx [Nowak] Xyz 4 Bef [Nowak] Xyz 5 Bef [Dziura] Lkj ... Czy takie rozwiązanie ma sens z punktu widzenia normalizacji, czy też należy szukać wyjścia gdzie indziej? Ten post edytował radabus 27.10.2011, 21:41:18 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Takie rozwiązanie jak sam napisałeś może cię nie satysfakcjonować. Pomyśl czy zależy Ci na tym by kilka kategorii może mieć subkategorie o tej samej nazwie.
Ja osobiście jestem za tabelami powiązań. Coś na styl 3 postaci normalnej (poruszając się w języku normalizacji b.d.) Zobacz Jeżeli mamy trzy byty - kategoria, subkategoria, użytkownicy to mam 3 tabelki dla opisu tych elementów w których każda ma powiązanie z innymi. tabela użytkowników nie ma żadnych powiązań, kategorie mają powiązanie z użytkownikiem, subkategorie mają powiązanie z użytkownikiem i kategorią. Lub można to zawrzeć w dwóch tabelach gdzie eliminujemy subkategorie i wrzucamy to do kategorii z zaznaczeniem "ojcowskiej" kategorii. Ta opcja jest o tyle lepsza, że pozwala na więcej zagłębień niż tylko kategoria->subkategoria; Zapis takiej struktury nie jest trudny, odczyt przy dobrym pomyśle też (IMG:style_emoticons/default/wink.gif) Robi się z tego struktura drzewa, a jeżeli chcesz mocne rozwiązanie to poszukaj w necie o hierarchicznej strukturze drzewa w DB - tej z poziomem i elementem obok, nie umiałbym Ci tego wytłumaczyć (IMG:style_emoticons/default/smile.gif) |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 2 Dołączył: 17.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
Nadal jednak nie wiem jak rozwiązać problem, że dla jednego kategoria A będzie główną kategorią, dla drugiego będzie podkategorią B, a dla innego podkategorią C. Przy czym założenie jest takie, że każdy ma widzieć tylko swoje kategorie, a nie cudze. Ślepy jestem, że tego nie widzę czy jak? (IMG:style_emoticons/default/wink.gif)
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.09.2025 - 03:24 |