![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 114 Pomógł: 9 Dołączył: 19.11.2007 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Witajcie, mam problem z utworzeniem sensownej bazy danych pod hierarchię, którą chcę zaimplementować.
Typy użytkowników: Mamy typy użytkowników (od użytkownika o najniższej randze do najważniejszego): szeregowy, starszy szeregowy, kapral, starszy kapral, plutonowy, sierżant, starszy sierżant Założenia: 1. Każdy z danej rangi może mieć "pod sobą" kilu niższych rangą. Np. jeden kapral może mieć "pod sobą" kilku starszych szeregowych, a każdy z nich kolejnych kilku szeregowych 2. Każdy szeregowy może mieć kilku starszych szeregowych nad sobą, lecz starszy szeregowy (i każdy wyższy rangą) może mieć tylko jednego przełożonego (tylko "najniższa" ranga może mieć kilu przełożonych) Oczekiwania: 1. chciałbym wyciągnąć dla szeregowego wszystkich "nad" nim 2. dla starszego sierżanta chciałbym wyciągnąć wszystkich podwładnych 3. dla plutonowego chciałbym wyciągnąć wszystkich "nad" i "pod" Moje pomysły: I. Utworzyć tabelę: uzytkownicy uid | login | st_sier_id | sier_id | plutonowy_id | star_kapr_id | karpral_id | star_szer_id | Zalety jakie tutaj widzę to łatwość wyszukiwania - wpisuję tylko jeden SQL i mam: ad.1.
ad.2.
ad.3.
Wady widzę dwie: 1. Podwładny może mieć tylko jednego przełożonego (a przydałoby mi się, by szeregowy mógł mieć więcej niż jednego) 2. W przypadku wprowadzenia np. podporucznika trzeba dodawać kolumnę II. Utworzyć tabele: uzytkownicy uid | login | relacje_uzytkownikow id | podwladny_id | przelozony_id | Tutaj zaletami jest: 1. Możliwość w obie strony podpięcia wielu użytkowników (przełożonych <potrzebne tylko przy szeregowym> i podwładnych) 2. Brak konieczności dodawania kolumn w tabeli przy dodaniu np. podporucznika Wadami natomiast wyszukiwanie. O ile nie wiedzę problemu w tworzeniu zapytania wyszukującego bezpośrednich podwładnych/przełożonych:
O tyle nie za bardzo wiem jak szukać głębiej? W PHP napisać pętlę, która będzie się kręciła do czasu dojścia na samo "dno" lub "wierzch"? Czy jest jakiś magiczny SQL który pomoże mi w takim działaniu? III. Połączenie obu przypadków: Utworzyć tabele: uzytkownicy uid | login | st_sier_id | sier_id | plutonowy_id | star_kapr_id | karpral_id | relacje_uzytkownikow id | starszy_szer_id | szeregowy_id | W przypadku rang, które nie muszą mieć kilu przełożonych - dopisywać do tabeli użytkowników Szeregowych również dopisywać do tabeli użytkowników z NULL'ami (sic!) w rangach, a w poprzez tabelę łącznikową (relacje_uzytkownikow) dopisywać ich do starszych szeregowych. Pozdrawiam i liczę gorąco na Waszą pomoc, którą opcję wybrać, a może jest jakiś lepszy pomysł? ![]() EDIT: Po namyśle mogłoby działać jak sklepy z kategoriami, podkategoriami i produktami. Jednakże każda "kategoria" też byłaby użytkownikiem. Problem w tym, że w sklepach kategorie i użytkownicy są w różnych tabelach, a potrzebuję, by były w jednej. Ten post edytował ViX 10.04.2017, 23:00:43 -------------------- Poszukujący wiedzy
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 21.06.2025 - 09:55 |