Da sie eindeutig sein müssen, wie soll ich FKs in einer MySQL-Datenbank nennen?
mysql
naming-conventions
foreign-keys
Zombies
quelle
quelle
Antworten:
In MySQL müssen Fremdschlüsseleinschränkungen nicht symbolisch benannt werden. Wenn kein Name angegeben wird, erstellt InnoDB automatisch einen eindeutigen Namen.
In jedem Fall ist dies die Konvention, die ich verwende:
Beispiel:
Ich versuche, bei referenzierenden und referenzierten Tabellen dieselben Feldnamen zu verwenden wie in
user_id
obigen Beispiel. Wenn dies nicht praktikabel ist, hänge ich auch den referenzierten Feldnamen an den Fremdschlüsselnamen an.Diese Namenskonvention ermöglicht es mir, den symbolischen Namen nur anhand der Tabellendefinitionen zu "erraten", und garantiert außerdem eindeutige Namen.
quelle
member_id
~> Link zum Tabellenelement,edited_id
~> Fremdschlüssel für bearbeiteten Benutzer, auch Link zum Tabellenmitglied. Wie soll ich sie benennen?Meine Wahl ist anders. Meiner Meinung nach sollte eine Tabelle ein
id
Feld haben, keinuser_id
einziges, da die Tabelle nur aufgerufenuser
wird.user_id
In dermessages
Tabelle befindet sich ein fk-Feld, daher muss klargestellt werden, welche ID (user_id
) ist.Eine vollständig selbsterklärende Namenskonvention könnte meiner Meinung nach sein:
Hinweis:
Diese fk könnte eindeutig sein, denn wenn eine
messages_user
Tabelle existiert, sollte der Name des referenzierenden Feldesuser_id
(und nicht nurid
) und der fk-Name sein:fk_messages_user_user_id_users_id
Mit anderen Worten, eine Fremdschlüssel-Namenskonvention stellt sicher, dass Sie eindeutige Namen haben, wenn Sie auch eine Namenskonvention "Referenzieren / referenziertes Feld" verwenden (und Sie können natürlich Ihre eigene auswählen).
quelle
$id
irgendwo eine Variable, die keine Ahnung hat, zu welcher Tabelle sie gehört. Je älter Ihre Codebasis ist und je mehr Leute daran gearbeitet haben, desto wahrscheinlicher wird dies.Wenn Sie nicht so oft auf fk verweisen, nachdem sie erstellt wurden, besteht eine Möglichkeit darin, sie einfach zu halten und MySQL die Benennung für Sie vornehmen zu lassen (wie Daniel Vassallo am Anfang seiner Antwort erwähnt ).
Während Sie mit dieser Methode die Einschränkungsnamen nicht eindeutig "erraten" können, können Sie den Fremdschlüssel-Einschränkungsnamen leicht finden, indem Sie eine Abfrage ausführen:
Beispielsweise erhalten Sie möglicherweise Folgendes von der Abfrage:
Wenn Ihnen dieser zusätzliche Schritt nicht zu viel ist, sollten Sie in der Lage sein, das gesuchte fk leicht zu finden.
quelle
Der Grund ist die Kombination von
referencing_table
undreferencing_field
ist in einer Datenbank eindeutig. Auf diese Weise ist der Name des Fremdschlüssels leicht zu lesen, zum Beispiel:Wir haben also zwei Fremdschlüssel:
Das Hinzufügen eines
user
Tabellennamens zum Fremdschlüsselnamen ist redundant.quelle
user_role
?user
undrole
haben viele Beziehungen unduser_role
ist die Tabelle, die alle Fremdschlüssel enthält. Sollte es seinfk_user_role_role
?