Czy to dobry projekt bazy danych, aby mieć użytkowników admin w tej samej tabeli co użytkownicy front-end?

Mam użytkowników, którzy mogą logować się na stronie front-end, i administratorów, którzy mogą logować się na stronie Administratora.

Czy zarówno użytkownicy, jak i administratorzy powinni być "użytkownikami" z różnymi rolami, czy powinni być podzieleni na różne tabele?

Author: OMG Ponies, 2010-11-12

9 answers

Role powinny być śledzone oddzielnie od kont użytkowników, ponieważ ktoś może być promowany (lub degradowany) w czasie. Czy w tej sytuacji miałoby sens posiadanie dwóch różnych kont użytkowników, w dwóch różnych tabelach? Nie sądzę.

Oto podstawowa struktura, której użyłbym -

Użytkownicy

  • user_id (klucz podstawowy)
  • user_name

Role

    Role_id (klucz główny)
  • role_name

USER_ROLES

  • user_id (klucz podstawowy, klucz obcy dla użytkowników.user_id)
  • role_id (klucz główny, klucz obcy do ról.role_id)
 49
Author: OMG Ponies,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-12 23:20:46

Tak, wszyscy użytkownicy należą do tabeli users. Musisz też mieć tabelę ról i mieć FK między nimi.

 8
Author: Esteban Araya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-12 23:20:21

Ryzyko przypadkowego stania się użytkownikiem administracyjnym nie powinno być większe niż przypadkowe stanie się innym użytkownikiem, a to też na pewno nie powinno się zdarzyć.

Weź pod uwagę, że jeśli masz zwykłych Użytkowników i użytkowników administracyjnych w oddzielnych tabelach, będziesz miał identyfikator użytkownika w tabeli zwykłych Użytkowników pasujący do identyfikatora użytkownika w tabeli administrative user. Musisz upewnić się, że jeden typ identyfikatora użytkownika może nigdy być przypadkowo użyty jako drugi Typ. Trudniej jest wykryć taki problem, niż wykryć coś, co może spowodować zmianę identyfikatora użytkownika na inny identyfikator użytkownika.

 8
Author: Guffa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-13 00:10:44

Jeśli admin i użytkownicy dzielą pola, wydaje się, że powinni przejść do tej samej tabeli, aby uniknąć powielania struktury. Oboje mają imię i nazwisko. Obaj są ludźmi w prawdziwym świecie. Pewnie tak powinno być.

Ale z drugiej strony państwa i miasta mają nazwę. I oba są lokalizacjami. Czy zawsze powinny iść w tym samym stole? Czasami robią to w modelach rekurencyjnych. Czasami są oddzielone.

My thinking...... czy admin jest uważany za " Typ" użytkownika w systemie? Czy jest to coś naprawdę innego, gdzie nic typu "użytkownik" nie odnosi się do niego? To zależy od tego, co administrator naprawdę oznacza w Twoim systemie. Czy struktura współdzielona jest na wzór miasta/państwa? A może współdzielona struktura jest zgodna z zasadą "jesteś użytkownikiem typu"?

Ale w razie wątpliwości należy umieścić adminów w tabeli użytkowników, bo wątpię, że są naprawdę oddzielni. Prawdopodobnie będziesz chciał udostępnić system uwierzytelniania dla obu. Prawdopodobnie będziesz chciał się podzielić tworzenie konta dla obu. Chyba, że admin jest jakąś specjalną rzeczą, z której korzystają tylko Programiści na zapleczu.

 8
Author: 800poundGorilla,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-13 04:31:18

Wierzę, że nie ma absolutnej prawdy o twoim pytaniu, to zależy od Twojego podania.

Dwa powody, dla których typy użytkowników mogłyby znajdować się w różnych tabelach, to:

  • typy różnią się strukturą danych (detal / adres itp..)
  • Dobry sen. Jeśli ręcznie edytujesz swoje wartości FK (wskazując na użytkownika), unikniesz ryzyka Wskazywania czegokolwiek na użytkownika interfejsu.
 5
Author: Teson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-12 23:42:32

Osobiście trzymałbym "użytkowników" w jednej tabeli. To, jak zdecydujesz się reprezentować role (np. jako statyczny bit w samej tabeli użytkownika lub poprzez zaawansowane prawa RBAC) zależy od złożoności Twojego systemu. Ale użytkownik to użytkownik.

 4
Author: StriplingWarrior,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-12 23:22:09

Utwórz oddzielną tabelę ról i oddzielną tabelę User_Roles. W pierwszym zdefiniuj role, w drugim Dołącz użytkowników do swoich ról (możliwe, że mogą mieć więcej niż jedną?)

 3
Author: Amy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-12 23:21:35

Nie powinno być problemu, gdzie przechowujesz użytkowników, jedynym problemem powinny być strony\metody, za pomocą których uzyskujesz dostęp do tych informacji.

Lepiej byłoby trzymać oba w tej samej tabeli, ponieważ mają ten sam typ danych.

 1
Author: Mor Shemesh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-12 23:21:07

Z punktu widzenia danych ma sens, że administratorzy to użytkownicy pełniący różne role. Dla każdego użytkownika może istnieć tabela korelująca użytkowników z ich rolami. Użytkownicy mogą mieć wiele takich ról, ale ostatecznie administrator jest użytkownikiem.

 1
Author: Martijn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-12 23:22:30