Mysql
 sql >> Datenbank >  >> RDS >> Mysql

DB-Design:Mitgliedertabelle getrennt oder alle in einer Tabelle?

Es hängt viel davon ab, was diese "anderen" Details sind. Dies ist eine häufig gestellte und interessante Frage, auf die es auf den ersten Blick keine „harte und schnelle“ Antwort gibt. Aber wenn wir das Thema abstrakter betrachten, über die tatsächliche Beziehung zwischen den Attributen ("Details") einer bestimmten Sache, die Sie darstellen möchten, finden wir vielleicht etwas Klarheit.

In Ihrer Frage geben Sie an, dass Freunde "minimale" und "andere" Details haben. Anstatt diese Details als "minimal" oder "anders" zu klassifizieren, klassifizieren wir sie danach, ob ein einzelnes ("atomares") Detail vollständig durch das bestimmt werden kann, was einen Freund einzigartig macht.

Ich nehme an, es gibt einen Primärschlüssel (PK), wie FriendID oder E-Mail-Adresse oder so etwas. Fragen Sie sich in Anbetracht dieser eindeutigen Kennung:„Wenn ich genau eine FriendID (oder E-Mail oder was auch immer Sie als PK verwenden) erhalten habe, bei welchen Details dieses Freundes bin ich mir absolut sicher? Ich kenne den Vornamen, den Nachnamen und das Geburtsdatum dieses Freundes, aber ich nicht Sie müssen unbedingt die Telefonnummer dieses Freundes kennen, da es mehr als eine davon gibt.

Fassen Sie in einer Tabelle alle Details zusammen, die Sie aufgrund der PK eindeutig kennen. Legen Sie die Details, für die Sie weitere Daten benötigen (wie "Zuhause" oder "Arbeit" im Fall von Telefonnummern), in "Kind"-Tabellen ab, die mit Fremdschlüsseln zur "Eltern"-Tabelle auf dem PK zurückgeführt werden. (Anmerkung:Es ist sehr wahrscheinlich, dass der PK der untergeordneten Tabelle zusammengesetzt ist, d. h. aus dem PK der übergeordneten Tabelle und dem Unterscheidungsfaktor (wie „home“ oder „work“ in diesem Beispiel) zusammengesetzte Schlüssel für die viele Seite von 1-M Beziehungen sind sehr gut.)

Datenbankfreaks nennen diese Zerlegung basierend auf funktionalen Abhängigkeiten .