Ich arbeite gerade zum ersten Mal mit Fremdschlüsseln und frage mich, ob es ein Standard-Namensschema für sie gibt.
Angesichts dieser Tabellen:
task (id, userid, title)
note (id, taskid, userid, note);
user (id, name)
Wenn Aufgaben Notizen enthalten, gehören Aufgaben den Benutzern und Benutzer verfassen Notizen.
Wie würden die drei Fremdschlüssel in dieser Situation benannt? Oder spielt es überhaupt eine Rolle ?
Update : Bei dieser Frage geht es um Fremdschlüsselnamen, nicht um Feldnamen!
Antworten:
Die Standardkonvention in SQL Server lautet:
So wäre beispielsweise der Schlüssel zwischen Notizen und Aufgaben:
Und der Schlüssel zwischen Aufgaben und Benutzern wäre:
Auf diese Weise erhalten Sie auf einen Blick einen Überblick darüber, welche Tabellen am Schlüssel beteiligt sind. So können Sie leicht erkennen, von welchen Tabellen eine bestimmte (die erste benannte) (die zweite benannte) abhängt. In diesem Szenario wäre der vollständige Schlüsselsatz:
So können Sie sehen, dass Aufgaben von Benutzern abhängen und Notizen sowohl von Aufgaben als auch von Benutzern abhängen.
quelle
message
Tisch hat einfrom_user_id
undto_user_id
beide würden werdenfk_message_user
. Es scheint mirfk_tablename_columnname
aus diesem Grund besser zu sein, (fk_message_from_user_id in meinem Beispiel) zu verwenden und dann zu versuchen, Ihre Spaltennamen über die Zieltabelle klar zu halten (dh to_user_id bezieht sich eindeutig auf die Benutzertabelle)Ich benutze zwei Unterstriche als Trennzeichen, dh
Dies liegt daran, dass Tabellennamen gelegentlich selbst Unterstriche enthalten. Dies folgt im Allgemeinen der Namenskonvention für Einschränkungen, da die Namen von Datenelementen häufig Unterstriche enthalten, z
quelle
Wie wäre es
FK_TABLENAME_COLUMNNAME
?K eep I t S imple S tupid wann immer möglich.
quelle
FK_Animals_OwnerID
- Tabelle mit Tieren und Besitzern, definiert in der Spalte OwnerIDEin Hinweis von Microsoft zu SQL Server:
Daher verwende ich Begriffe, die die Abhängigkeit beschreiben, anstelle der herkömmlichen Begriffe für primäre / fremde Beziehungen.
Wenn ich auf den PRIMARY KEY der unabhängigen (übergeordneten) Tabelle durch die ähnlich benannten Spalten in der abhängigen (untergeordneten) Tabelle verweise, lasse ich die Spaltennamen weg:
Wenn Sie auf andere Spalten verweisen oder die Spaltennamen zwischen den beiden Tabellen variieren oder nur um explizit zu sein:
quelle
Normalerweise lasse ich einfach meine PK mit dem Namen id und verkette dann meinen Tabellennamen und den Namen der Schlüsselspalte, wenn ich FKs in anderen Tabellen benenne. Ich kümmere mich nie um Kamelhüllen, da einige Datenbanken die Groß- und Kleinschreibung verwerfen und trotzdem einfach alle Groß- oder Kleinbuchstaben zurückgeben. In jedem Fall würde meine Version Ihrer Tabellen folgendermaßen aussehen:
Beachten Sie, dass ich meine Tabellen auch im Singular benenne, da eine Zeile eines der Objekte darstellt, die ich beibehalten habe. Viele dieser Konventionen sind persönliche Vorlieben. Ich würde vorschlagen, dass es wichtiger ist, eine Konvention zu wählen und sie immer zu verwenden, als die Konvention eines anderen zu übernehmen.
quelle
Dies ist wahrscheinlich übertrieben, aber es funktioniert für mich. Es hilft mir sehr, wenn ich mich besonders mit VLDBs beschäftige. Ich benutze folgendes:
Wenn Sie aus irgendeinem Grund nicht auf einen Primärschlüssel verweisen, müssen Sie natürlich auf eine Spalte verweisen, die in einer eindeutigen Einschränkung enthalten ist. In diesem Fall:
Kann es lange dauern, ja. Hat es mir geholfen, Informationen für Berichte klar zu halten, oder hat es mir einen schnellen Einblick gegeben, dass das potenzielle Problem während eines Produktalarms besteht? 100% würden gerne die Gedanken der Menschen über diese Namenskonvention erfahren.
quelle
Mein üblicher Ansatz ist
Oder anders ausgedrückt
Auf diese Weise kann ich zwei Fremdschlüssel benennen, die auf dieselbe Tabelle verweisen wie eine
history_info table
withcolumn actionBy and actionTo
from-users_info
TabelleEs wird so sein
Beachten Sie, dass:
Ich habe den Namen der untergeordneten Tabelle nicht angegeben, da es mir vernünftig erscheint. Ich bin in der Tabelle des Kindes, sodass ich den Tabellennamen des Kindes leicht annehmen kann. Der Gesamtcharakter ist 26 und passt gut zu der 30-Zeichen-Grenze von Orakel, die Charles Burns in einem Kommentar hier angegeben hat
quelle
Basierend auf den Antworten und Kommentaren hier sollte eine Namenskonvention, die die FK-Tabelle, das FK-Feld und die PK-Tabelle (FK_FKTbl_FKCol_PKTbl) enthält, Kollisionen von FK-Einschränkungsnamen vermeiden.
Also, für die angegebenen Tabellen hier:
Wenn Sie also eine Spalte hinzufügen, um zu verfolgen, wer zuletzt eine Aufgabe oder eine Notiz geändert hat ...
quelle
Wenn Sie nicht so oft auf Ihre FKs verweisen und MySQL (und InnoDB) verwenden, können Sie MySQL einfach die FK für Sie benennen lassen.
Zu einem späteren Zeitpunkt können Sie den gewünschten FK-Namen finden, indem Sie eine Abfrage ausführen .
quelle
Versuchen Sie, die UUID der Version 4 in Großbuchstaben zu verwenden, wobei das erste Oktett durch FK und '_' (Unterstrich) anstelle von '-' (Bindestrich) ersetzt wird.
Z.B
FK_4VPO_K4S2_A6M1_RQLEYLT1VQYV
FK_1786_45A6_A17C_F158C0FB343E
FK_45A5_4CFA_84B0_E18906927B53
Begründung ist die folgende
quelle