Datenbank Design

Spin

Top Contributor
Hallo liebe Community,

ich habe da mal folgende Frage bzw. folgendes Problem:

Ich habe Customer, Staff und Admins. Alle 3 Gruppen haben verschiedene Access Rechte , definierte Rollen sind in der Tabelle : role vorhanden (Admin,Staff, Member)

Ich habe eine Anwendung in der sie sich einloggen sollen und entsprechend ihrer Rollen sehen sie mehr oder weniger. Dazu habe ich folgende Ansätze um den Login zu handeln:

1. Lösung:

Ein Login für alle :

Ich habe eine Tabelle user : (user_id, user_pw , user_pw_salt , user_role)
Ich habe eine Tabelle customer : (customer_id ....)
Ich habe eine Tabelle staff (staff_id ...)
Ich habe eine Tabelle admin (admin_id ...)

Tabelle user (user_id) : FK : customer_id, admin_id, staff_id

Der PK von user_id zeigt auf den PK von customer_id, admin_id und staff_id

Damit ist der user jetzt entweder in der Tabelle customer, in der Tabelle staff oder in der Tabelle admin zu finden.

Der Benutzer loggt sich ein und ich frage in der user Tabelle ab. Anschließend bekomme ich die Rolle und weiss in welcher Tabelle ich dann mit meiner id fragen muss.

Ich habe also : Select an table user + Select an table customer,staff,admin



2. Lösung

Ich habe eine Tabelle customer : (customer_id user_pw , user_pw_salt , user_role)
Ich habe eine Tabelle staff (staff_id user_pw , user_pw_salt , user_role)
Ich habe eine Tabelle admin (admin_id user_pw , user_pw_salt , user_role)


Weiterhin habe ich dann zwei Logins. Einen für die Kunden und einen für admin,staff.
Kundenlogin --> select an customer

Adminlogin --> select an admin , wenn da nicht , select an admin

Hier kann auch ein customer ein Admin sein ... was in der oberen Lsg nicht geht.

--

Was ist denn jetzt sinnvoller? Ich habe sicherlich viele Vorteile und Nachteile vergessen... aber für was würdet ihr euch entscheiden?

Muss noch viel Erfahrung sammeln ....:rtfm:

vielen dank!! :)
 

XHelp

Top Contributor
Was ist denn jetzt sinnvoller?
Keins davon :bahnhof:
warum nicht:
Code:
users: id, login, password, role
und das war's. Da hast du ja schon direkt die Rolle des Benutzers und kannst anhand des Eintragen entscheidungen im Programm treffen.
Was soll die Aufspaltung in 10000 Tabellen bringen?
 

Spin

Top Contributor
Du meinst also das eine user Tabelle reicht und ich dann anhand der Rolle und der Id in einer anderen Tabelle neu nachfrage.

Stell dir jetzt vor ich möchte einen neuen Benutzer anlegen. Der Benutzer hat noch ganz viele Daten : Name, PLZ , Ort usw.

Das heißt ich mache ein INSERT in die user Tabelle und ich mache ein INSERT in Benutzertabelle.
Analog zu Admin und Staff Tabelle.

Bei der zweiten Lösung müsste ich halt nur einen Insert machen. Genau in der Tabelle in der ich einen neuen Datensatz anlegen möchte.


Aber dank schon mal.

Eine Tabelle user finde ich gut, und da fällt mir ein, dass ich selbst mit einer Tabelle user zwei Logins basteln könnte ;)

Szenario:

Was mache ich wenn ein Admin zwei Rollen hat ? System-Admin und Management-Admin, aber nicht Access-Admin.
(lediglich Besipiele)

Hat dann ein Datensatz zwei role_id 's.?

Oder nimm ich dann eine user_role_rel Table? Ja so müsste es klappen.

user role
1 1
1 2
2 1

Many to Many.

Also eine User Tabelle und dann mithilfe der ID und der ROLLE eine weitere Tabelle anfragen um die entsprechenden Daten zu bekommen?


--
Andere Frage:

Was passiert wenn ich eine Tabelle habe mit 5 ForeignKeys und die Tabellen haben nochmals Foreignkeys.

Kann ich Joins schachteln? Wenn ja hat einer nen Beispiel?

Danke .)
 

XHelp

Top Contributor
Wenn du wirklich mehrfachzuweisung machen willst, dann verzichtest du eben auf "role"-Eintrag des user-Tabelle. Bei deiner Struktur musst du dir noch gedanken machen, was passiert, wenn die Rollen entgegengesetzte Merkmalle haben? "Schreiben erlaubt" vs "Schreiben verboten": welches nimmst du da?

Was du mit der anderen Frage meinst, verstehe ich nicht wirklich. Aber so alles in einem hört es sich nach einer ziemlich verkorksten Struktur an.
 

oopexpert

Mitglied
Berechtigungen sind ein dreiwertiges Tupel aus:

1. Wer (Benutzer / Benutzergruppe)
2. darf was (Recht / Rolle)
3. mit was machen (Resource)

Das Maß der Flexibilität muss hier entschieden werden. In einer schon sehr großen Ausbaustufe würde man folgende Tabellen haben:
- Benutzer
- Benutzergruppe (gruppiert Benutzer)
- Recht
- Rolle (gruppiert Rechte)
- Relationstabellen zwischen Ressourcen, Benutzer- und Benutzergruppen, Rollen und Rechte

In Deinem Fall kann man sicherlich einige Dinge zusammenfassen.

Üblicherweise entscheidet man sich entweder für Rollen-Konzept (Oracle DB) oder Gruppen-Konzept (Microsoft Active Directory). Ich kenne kein System, was beide Konzepte verfolgt. Ich gehe davon aus, dass Du mit Rollen arbeiten möchtest. Deshalb wird die Tabelle "Benutzergruppe" nicht benötigt. Die Alternative hat eine höhere Komplexität, denn man kann dann weiterdesignen und es tauchen folgende Fragen auf: Gruppen in Gruppen? Was ist mit Zyklen in der Gruppenstruktur?

Wenn Du keine flexible Gruppierung von Rechten zu Rollen benötigst und die von Dir definierten Rollen eine Menge von fixierten Rechten darstellen, dann ist die Rechte-Tabelle überflüssig. Aus Deinen Ausführungen würde ich ableiten, dass Du nicht explizit jedes Recht verwalten möchtest, sondern schon Rechtegruppen (Rollen) definiert hast. Die Alternative würde eine Menge weiterer Fragen aufwerfen, wie z.B. können Rollen in Rollen existieren? Zyklenbehandlung? Sollen Rechte positiv und/oder negativ definiert werden? Wie sieht die Priorisierung bei sich widersprechenden Rechten aus (siehe XHelp)?

Sind zusätzlich zu den Rollen auch schon die Resourcen implizit festgelegt, dann fällt auch die Ressourcentabelle weg. (Ein Administrator ist grundsätzlich für alle Bereiche Administrator vs. Ein Administrator ist nur für bestimmte Bereiche Administrator). Hier entscheidet sich, ob man funktionsbezogene Berechtigungen oder Objektberechtigungen vergeben möchte. Hier kenne ich Deine Anforderungen nicht.

Ich habe hier nur einen Teil dessen, was man an Anforderungen an ein Berechtigungssystem stellen kann, angesprochen und jede zusätzliche Anforderung kann das Modell verändern. Deshalb stimme ich XHelp zu, die Anforderungen nochmal gegen das Modell zu prüfen.
 

Spin

Top Contributor
Moin und vielen Dank für eure Erklärungen.

Ich habe mich vielleicht ein wenig uneindeutig ausgedrückt und möchte dass nochmal nachholen.
Und zwar geht es um eine Anwendung die Beispielsweise das Modul News besitzt.

Modul: News

News anlegen
News löschen
News ändern
News runterladen
News ins Archiv schieben
News als E-Mail versenden
News Vorschau
usw.

Ich habe also eine Reihe an Funktionen, die nur bestimme Leute machen dürfen.

Daher habe ich eine Tabelle: role :

role
1 Admin
2 Staff
3 User

Nun möchte ich gerne das der Staff News anlegen und News ändern darf, aber nicht News löschen oder als E-Mail versenden.
Diese Problematik beschreibt die Benutzerrollen, aber nicht das Konzept, wie ich die User alle insgesamt verwalte.

Und zwar bestehen meine User aus : Customer, Staff und Amdin.

Die Idee ist es jetzt eine komplette User Tabelle zu erstellen, wo alle User ein pw und eine role haben.
Weiter habe ich eine Tabelle: Customer , Tabelle: Staff, Tabelle: Admin.
In diesen Tabellen sind dann mehrer Informationen zu den jeweiligen Entities vorhanden.

XHelp hatte ja schon vorgeschlagen, mit der user_id und der role dann ein select an Customer, Staff oder Admin zu machen.

Vorschlag zwei war halt : Keine User Tabelle , sondern gleich Tabelle: Customer, Tabelle: Staff und Tabelle : Admin.

Entsprechend zwei Logins für einen Admin bereich und einen Userbereich. ;)



--
Ich habe mich aber jetzt für Lsg. 1 entschieden und mit hilfe eines Logins. Ich frage die Datenbank an und bekomme eine Role zurück. Anhand der rolle entscheide ich in welchen Bereich der User weitergeleitet wird.

Aso : ein Beispiel für die detailierte Benutzerverwaltung wäre toll :)
Vielen Dank fürs Lesen und kommentieren :p
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Frage zu Datenbank Design bei Events (ZenDesk) Datenbankprogrammierung 1
I Datenbank Design: Internationalisierte Texte -> Bitte um Feedback Datenbankprogrammierung 3
E Problem beim Datenbank-Design (relational) Datenbankprogrammierung 10
torresbig MySQL hibernate - could not resolve entity class ... (Datenbank Anfänger) Datenbankprogrammierung 19
M Meine Datenbank lässt sich mit meiner Methode nicht ändern Datenbankprogrammierung 1
I SaaS Applikation: pro Kunde eine Datenbank / Schema oder eine DB für alle Kunden? Datenbankprogrammierung 76
T SQL-Statement Datenbank nach SQL Statement schließen? Datenbankprogrammierung 7
M Datenbank Zugraff nach Umwandlung in .jar-Datei nicht mehr möglich Datenbankprogrammierung 4
Auf MySql Datenbank zugreifen funktioniert nicht Datenbankprogrammierung 8
MongoDB-Datenbank in Androidstudio einbinden Datenbankprogrammierung 1
thor_norsk Datenbank: Apache Derby Datenbankprogrammierung 6
B SQlite Datenbank, trotz Statements wurden nicht alle Zeilen erzeugt? Datenbankprogrammierung 35
M Datenbank mit REST API Datenbankprogrammierung 66
M Entfernte Datenbank Datenbankprogrammierung 11
T Datenbank: Tabelle erstellen bei Web-Applikation Datenbankprogrammierung 4
D SQLite Datenbank in Android Studio (Java) durchsuchen Datenbankprogrammierung 3
M MySQL Datenbank in Array Datenbankprogrammierung 2
S Den letzten Eintrag aus Datenbank ziehen (Oracle SQL Dev.) Datenbankprogrammierung 14
N Datenbank abfragen nach bestimmten Wort Datenbankprogrammierung 7
Beginner22 Zugriff auf Datenbank aus Java über mariadb Datenbankprogrammierung 3
ma095 value NULL- Datenbank Postgresql Spring - intellij community Datenbankprogrammierung 0
raptorrs Plötzlich keine Verbindung zur Datenbank mehr möglich Datenbankprogrammierung 14
Davee SQLite SQLite Datenbank lässt sich nicht auf anderen PCs öffnen Datenbankprogrammierung 8
P Datenbank Tool - besser als oracle SQL Developer gesucht mit effizinte Verbindungsverwaltung Datenbankprogrammierung 2
X JPA (EclipseLink) und Oracle Datenbank Datenbankprogrammierung 2
T Datenbank auf einer Webseite aus einer Exceltabelle erstellen Datenbankprogrammierung 5
L SQL Datenbank Datenbankprogrammierung 7
L SQL Datenbank INSERT INTO Datenbankprogrammierung 6
L SQL Datenbank Tabelle insert Datenbankprogrammierung 7
L SQL Datenbank Tabelle erstellen Datenbankprogrammierung 6
nonickatall MySQL Auf neue Datensätze in einer Datenbank reagieren Datenbankprogrammierung 5
W MYSQL Datenbank Login Android Datenbankprogrammierung 3
anton1 Online Datenbank Datenbankprogrammierung 7
krgewb H2-Datenbank öffnen Datenbankprogrammierung 8
J Datenbank abfragen Datenbankprogrammierung 6
P Verbindung zu einer Access Datenbank per Eclipse oder Intellij Datenbankprogrammierung 0
O SQL Abfragen mit Mini Datenbank Datenbankprogrammierung 12
Z Datenbank Choicebox wird nicht befüllt Datenbankprogrammierung 15
S Suche In SQL Datenbank mit array Datenbankprogrammierung 6
P Enum in der Datenbank Datenbankprogrammierung 1
Z SQL- Datenbank 1.PK zu 2.FK Datenbankprogrammierung 3
E netbeans - jsp Daten in Datenbank hinzufügen Datenbankprogrammierung 2
bueseb84 Spring Boot : Update Mysql Datenbank Datenbankprogrammierung 1
Avalon Attribute werden mit Unterstrich in eine MySQL Datenbank eingetragen Datenbankprogrammierung 10
MiMa wo Datenbank verbinden/trennen? Datenbankprogrammierung 1
H MySQL Verbindung Datenbank und Eclipse (Java) Datenbankprogrammierung 5
DeltaPilot12 Datenbank connect Funktion Datenbankprogrammierung 7
J Oracle Datenbank-Tabelle per Combobox (oder ähnliches) auswählen Datenbankprogrammierung 3
N SQL Datenbank Spalte in Java Array Datenbankprogrammierung 2
J JAR-Datei und Datenbank Datenbankprogrammierung 8
Bluedaishi Datenbank Abfrage Datenbankprogrammierung 36
Kirby.exe Zeile aus der Datenbank holen wenn ein match besteht Datenbankprogrammierung 7
Kirby.exe Es werden keine Einträge in der Datenbank gemacht Datenbankprogrammierung 23
C Datenbank anlegen und über eine Website mit Daten füllen? Datenbankprogrammierung 25
J Welche Kriterien haben Einfluss auf die Geschwindigkeit einer Datenbank ? Datenbankprogrammierung 4
M SQLite Datenbank mit SQLite Datenbankprogrammierung 7
C String in Datenbank einfügen Datenbankprogrammierung 11
C Keinen Zugrift auf Datenbank Datenbankprogrammierung 2
C Datenbank zugreifen Datenbankprogrammierung 10
L Auf Strato Datenbank zugreifen Datenbankprogrammierung 7
H Fehler bei getConnection zu MySQL Datenbank Datenbankprogrammierung 18
G Datenbank Statement Datenbankprogrammierung 22
M Datenbank editierbach machen in JTable Datenbankprogrammierung 13
S Datenbank MySQL und Java Datenbankprogrammierung 8
M H2 Verbindung zur Datenbank komplett schließen Datenbankprogrammierung 11
J Aufbau meiner Datenbank/Tabelle - Verbessern? So lassen? Datenbankprogrammierung 39
J Nur CRUD über Datenbank Klasse, oder auch mehr ? Datenbankprogrammierung 2
Dimax MySQL Maximale Datenlänge für eine Spalte einer Datenbank in java ermitteln Datenbankprogrammierung 15
L Appabsturz mit Datenbank Datenbankprogrammierung 4
J Zahlungseingänge von mehreren Kunden wie am besten abbilden in der Datenbank ? Datenbankprogrammierung 8
L Datenbank sichern Datenbankprogrammierung 8
S Daten von SQLite Datenbank nutzen Datenbankprogrammierung 5
J Datenbank VPS Server Datenbankprogrammierung 3
H MySQL MySQL - Keine Verbindung zur Datenbank?! Datenbankprogrammierung 4
NIckbrick MySQL Befehle aus Datenbank auslesen Datenbankprogrammierung 21
S Datenbank/Java true/false Datenbankprogrammierung 8
J JUNIT und CRUD-Datenbank Datenbankprogrammierung 4
F Datenbank/Datenabgleich/Wiederholungsabfrage Datenbankprogrammierung 12
@SupressWarnings() Eure bevorzugte Datenbank-Library Datenbankprogrammierung 9
C datenbank verbindung config Datenbankprogrammierung 23
L MySQL Android zu externer MySQL Datenbank verbinden Datenbankprogrammierung 5
M Datenbank vor unerlaubtem Zugriff durch Benutzer schützen Datenbankprogrammierung 3
U MySQL Aus Servlet in Datenbank schreiben Datenbankprogrammierung 4
H Datenbank Export mit Java Datenbankprogrammierung 3
P Daten in eine mySQL Datenbank einfügen Datenbankprogrammierung 4
S SQL-Statement Datenbank Zeitbereich durchsuchen Datenbankprogrammierung 2
L Messenger App - Wie am besten auf Datenbank zugreifen? Datenbankprogrammierung 4
H MySQL Datenbank auf Xampp nimmt keine Mediumblob an. Datenbankprogrammierung 0
D Datenbank Abfrage Datenbankprogrammierung 7
H MySQL Benutzer Login System mit Datenbank Informationen (Abfrage zu User ist auf DB gesichert) Datenbankprogrammierung 42
L Oracle Datenbank über Java aufrufen Datenbankprogrammierung 29
DaCrazyJavaExpert Derby/JavaDB Unfindbarer Fehler im Datenbank-Code Datenbankprogrammierung 87
DaCrazyJavaExpert Derby/JavaDB Wert einer Variable in der Datenbank direkt auf 1 setzten. Datenbankprogrammierung 71
W MySQL Ausgabe von Datenbank in Java-App Datenbankprogrammierung 6
M portable Datenbank Datenbankprogrammierung 2
S Name aus der Datenbank bekommen Datenbankprogrammierung 2
K Eclipse: JBoss Hibernate Tool: Kein Zugriff auf Datenbank Datenbankprogrammierung 5
MaxG. Datenbank werte vergleichen Datenbankprogrammierung 5
MaxG. Access Datenbank Datenbankprogrammierung 48
@SupressWarnings() HSQLDB Datenbank für mein Dorfbauspiel "Time of Kings" Datenbankprogrammierung 6

Ähnliche Java Themen

Neue Themen


Oben