Normalisierung
Normalisierung ist ein wichtiges Thema bei der Modellierung deiner Datenbank. Aber das ist gar nicht so schwer. Eigentlich haben wir das schon die ganze Zeit gemacht.
Beziehungen
Normalerweise haben Einträge eine Art von Beziehung.
Um diese zu definieren, verwenden wir den Begriff One to Many
(1:n) Many to One
(n:1), One to One
(1:1).
Many to Many
(n:n) ist etwas, das du normalerweise nicht hast, und wenn doch, ist es wahrscheinlich ein Zeichen für eine schlechte Normalisierung.
One to Many und Many to One
One to Many
bedeutet, dass eine einzelne Entität von dir mehrere Einträge in einer einzigen Tabelle hat.
Wir haben das bereits in unserem friend_graph
.
Ein Spieler kann viele Freunde haben.
So einfach ist das!
Many to One
ist normalerweise dasselbe, nur in eine andere Richtung.
Viele Freundschaftsverbindungen beziehen sich auf einen Spieler.
One to One
One to One
ist das, was es schon sagt.
Eine einzelne Entität steht in Beziehung zu einer anderen einzelnen Entität in einer anderen Tabelle.
Das haben wir mit unserer Tabelle player
und money
.
Die Geldtabelle enthält genau einen Eintrag für einen Spieler.
Many to Many
Mir fällt nicht einmal ein gutes Beispiel für eine Many to Many
Beziehung ein.
Es ist einfach gegen das Gesetz.
Normalformen
Wenn wir Daten normalisieren, verwenden wir oft die Begriffe der Normalform. Das reine Konzept ist immer Gegenstand von Diskussionen und wird etwas unscharf, je mehr man versucht, zu normalisieren.
Wikipedia hat einige gute Beispiele dafür, wenn du dich damit beschäftigen willst. In Wirklichkeit wird dich nie jemand fragen, welche Normalform deine Tabelle haben soll.
Faustregeln
Im Allgemeinen gibt es ein paar Regeln, die das Normalisieren von Daten schon recht einfach machen. Denke nicht über deine Normalform nach. Alles, was zählt, ist die Beziehung einer Entität zu einer anderen Entität.
Schlüssel sind der Schlüssel
Denke an eindeutige Bezeichnungen für deine Entität. Diese Bezeichnungen sollte sich nicht ändern. Das kann eine Art UID sein, oder wenn deine Entität keine hat, sollte es eine automatisch inkrementierende ID sein.
One to many in a column
Versuche gar nicht erst, One-to-Many-Beziehungen für Listen und Ähnliches in einer einzigen Spalte zu serialisieren. Das mag eine Zeit lang funktionieren, aber später wirst du dich dafür hassen. Wenn du eine One-to-Many-Beziehung hast, mache zwei Tabellen dafür.
Je feiner, desto besser
Teile deine Sachen auf. Gruppiere die Dinge, die zusammen bleiben sollen und zusammen angefordert werden. Generell gilt: Wenn du es nicht zur gleichen Zeit brauchst, gehört es nicht zusammen.
Foreign keys sind der Schlüssel
Wenn deine Tabelle nicht von anderen Tabellen referenziert wird oder nicht auf eine andere Tabelle verweist, sind deine Daten wahrscheinlich nicht auf die richtige Weise gekoppelt. Letztendlich gehören alle Daten zu irgendeiner Art von Entität und dein Tabellenlayout sollte dies widerspiegeln.