• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Przypisać dany obiekt pod użytkownika czy wykonać relacje.

VPS Starter Arubacloud
0 głosów
130 wizyt
pytanie zadane 15 lutego 2019 w SQL, bazy danych przez Greeenone Pasjonat (16,100 p.)

Hej,

Mam pewien problem z utworzeniem struktury bazy danych. Nie wiem które z rozwiązań jest poprawne.

Krótki opis:

- Szef tworzy miasta do których przypisuje sklepy. Szef ma dostęp do wszystkiego. Może od do każdego miasta przypisać menadżera któremu pojawią się wszystkie sklepy w danym mieście. Może on także przypisać pracownika do jednego sklepu wtedy ten będzie miał dostęp do niego.

I tutaj pytanie. Dla sklepu lepiej przypisać id szefa czy dać wpis w tabeli dostęp? (Jako, że ma dostęp do wszystkiego to wydaje mi się, że bez sensu jest mnożenie wpisów z dostępami)

Dodatkowe wpisy jak np. id szefa u pracowników jest po to, aby łatwiej było wyszukać i wyświetlić dane. Np. zamiast wyszukać wszystkie miasta przypisane do szefa a następnie wyciągać wszystkich pracowników, po prostu wyszukać po ID szefa.

Druga sprawa:

Gdy zabierany jest dostęp dla użytkownika to lepiej usunąć tabelę czy dać zmienną boolean które będzie sprawdzać, czy użytkownik ma dostęp ?

 

1 odpowiedź

0 głosów
odpowiedź 15 lutego 2019 przez Asertywny Mądrala (5,430 p.)
wybrane 15 lutego 2019 przez Greeenone
 
Najlepsza

Parę uwag:

  • czy_jest_menadżerem jako pole w bazie wydaje się nie mieć sensu. Może się okazać, że w niedługim czasie będą potrzebne inne typy pracowników. Dlatego lepiej zrobić kolejny foreign key w stylu "typ". Jeśli jakiś pracownik może mieć więcej niż jeden "typ", wtedy będziesz potrzebował tabeli łączącej o schemacie (pracownik: FK, typ: FK) z możliwymi wieloma wpisami.
  • Skoro każde miasto ma jednego szefa, po co przechowujesz informację o szefie w tabeli pracowników? Miasto wystarczy.
  • Mógłbyś dokładniej wytłumaczyć, do czego służy tabela dostęp?

Najbardziej sensownym rozwiązaniem wydaje się dostawić FK w postaci miasta do każdego sklepu. Z tego, można jednoznacznie wyznaczyć szefa poprzez odpowiednie joinowanie.

Inna sprawa - skąd wiesz, który pracownik pracuje w którym sklepie?

komentarz 15 lutego 2019 przez Greeenone Pasjonat (16,100 p.)

Dzięki za odpowiedź ! 

Już tłumaczę :P

A więc tak:

Główny szef ma dostęp do globalnej listy miast, sklepów oraz pracowników.

Owy szef może dodać pracownika a następnie mianować go na menadżera miasta lub miast. Chcę zrobić tak, żeby inny szef który zarządza w ogóle czym innym mógł także mianować danego użytkownka na menadżera u siebie.

Menadżer ma listę wszystkich sklepów przypisanych do swojego miasta oraz pracowników. Może ich usuwać albo dodawać

Każdy pracownik ma dostęp do sklepów które zostały mu przydzielone przez szefa lub menadżera (Może mieć też dostęp u zupełnie kogo innego)

Odpowiadając na twoje pytania:

- Co do menadżera, to dziękuje za podpowiedź. Nie pomyślałem o tym.

- Szef i miasto: Przechowuję aby łatwiej było wyszukać wszystkich pracowników po id szefa niż na przykład szukając po sklepach, miastach itp. tworząc kolejne zapytanie. Wyniki by się dublowały itp. Chyba, że można to rozwiązać jakoś inaczej

Tabela dostęp służy do weryfikacji czy dany użytkownik może modyfikować dany sklep.

Tak w ogóle delikatnie zmodyfikowałem strukturę:

komentarz 15 lutego 2019 przez Asertywny Mądrala (5,430 p.)
Shop:
shop_id (PK)
city_id (FK)
owner_id (FK)

City:
city_id (PK)
name

Worker:
worker_id (PK)
first_name
last_name
etc

Owner:

owner_id (PK)
first_name
last_name
etc

Shop_Worker (tabela, która mówi, kto jest zatrudniony w którym sklepie)
worker_id (fk)
shop_id (fk)

CityAccess:

user_id (fk)
city_id (fk)

ShopAccess:

user_id(fk)
city_id(fk)

 

Ja to tak widzę. Prosto i bez redundancji.
komentarz 15 lutego 2019 przez Greeenone Pasjonat (16,100 p.)
Dziękuje !

Jeszcze tylko jedne pytanie. Teraz jak szef będzie chciał zobaczyć wszystkich swoich pracowników, to muszę wyszukać tak:

- Pobrać listę sklepów przypisanych do Ownera

- Z tych tabel pobrać ID sklepów

- W Shop_worker pobrać ID wszystkich userów przypisanych do danych sklepów

- W tabeli user pobrać dane z każdego pobranego ID ?

+ do tego usunąć duplikaty (Gdy użytkownik jest zatrudniony w dwóch sklepach)
komentarz 15 lutego 2019 przez Asertywny Mądrala (5,430 p.)
Tak.
W praktyce można to zrobić w jednym zapytaniu przy użyciu JOINów.

Podobne pytania

0 głosów
1 odpowiedź 432 wizyt
pytanie zadane 14 stycznia 2019 w PHP przez Greeenone Pasjonat (16,100 p.)
0 głosów
1 odpowiedź 64 wizyt
pytanie zadane 27 listopada 2023 w SQL, bazy danych przez Piotrek2713 Mądrala (5,320 p.)
+1 głos
1 odpowiedź 120 wizyt
pytanie zadane 1 lutego 2023 w SQL, bazy danych przez Antoni2422 Użytkownik (570 p.)

92,453 zapytań

141,262 odpowiedzi

319,086 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...