Infos zur Datenbankstruktur

Werner S

Mitglied
Grüß euch,

ich mach mir, während dem Lernen gerade ein paar Gedanken um die Datenbankstruktur.

Nehmen wir mal an Ihr habt eine User Tabelle und eine für zb. News oder was auch immer.
Diese News sollen mehreren Usern zugewiesen werden.

Würdet Ihr in die News in der Spalte "user_ids" alle User rein setzten, getrennt zb. durch , oder ; um alle später auszulesen oder würdet Ihr eine 3 Tabelle anlegen in dieser dann jeder User einzeln kommt und den News zugewiesen wird?
 
Das solltest du definitiv über eine Zwischentabelle lösen. Wenn du kommaseparierte Listen in einer Tabellenspalte hast, hast du bei der Planung was falsch gemacht - und wenn du dann Daten abfragen musst, weißt du auch, warum Zwischentabellen besser sind 🤣
 
Absolut richtig.
Bei der Konzeption von relationalen Datenbankstrukturen gibt es einige Grundprinzipien und Vorgehensweisen.
Stichwort: Normalisierung.

In deinem Fall musst du gemäß der 1. Normalform sicherstellen, dass du, vereinfacht gesagt, nicht mehrere Werte, die sich eigentlich logisch voneinander abtrennen lassen, in einer Datenbankspalte zusammengefasst hast.
Das betrifft insbesondere Listen o.ä., da hierdurch die Bearbeitung, Datenabfrage und Sortierung erheblich erschwert wird.

Zudem ist unbedingt die Beziehung der beiden Relationen zu beachten.
Beliebig viele User schreiben z.B. beliebig viele News-Artikel.
Das ist eine n : m-Beziehung.

In Laravel kennst du dies vielleicht von den Eloquent Relationships. Da nennt man das Many to Many Relationship und nutzt dann in den beiden Models die belongsToMany()-Methode, um die Beziehung zu definieren.

Dies bedeutet immer, dass es eine Zwischentabelle geben muss, die die beiden Relationen miteinander verknüpft und in Beziehung setzt.

Bei 1 : n-Beziehungen ist das hingegen nicht erforderlich, da du z.B. für die Zuordnung von mehreren E-Mail-Adressen zu einem User schlicht zwei Tabellen erstellst: users und emails.
Dabei wird die Relation mit der Mengenangabe n (emails) um eine Spalte für die eindeutige Verknüpfung zur Relation mit der Mengenangabe 1 (user_id) erweitert.

Wichtig: Dann darf dort aber auch wirklich immer nur eine User-ID hinterlegt werden, da jede E-Mail in dem Fall nur einem User zugeordnet werden soll.
Sobald dies nicht der Fall ist, hätten wir wieder eine n : m-Beziehung und bräuchten die dritte Tabelle für die Abbildung der Beziehung der zwei Relationen.
 
Zuletzt bearbeitet:
Ich danke euch für eure Antworten.

In Kurzform also:
In Laravel also die users Tabelle so belassen wie sie ist, für Profilangaben eine eigene Tabelle nutzen, für News eine eigene und für die User die an einem Artikel Arbeiten auch eine eigene Tabelle.
 
Zurück
Oben Unten