Ich frage mich, was ist die beste Praxis für die Benennung primäre/eindeutige Schlüssel in einer Datenbank mit vielen Tabellen. Sollten Sie immer nur den Primärschlüssel jeder Tabelle anrufen id
oder ist es in Ordnung, kein id
Feld in jeder Tabelle zu haben und nur jedes von ihnen zu benennen something1_id
, something2_id
, usw.?Naming Primärschlüssel "ID" vs "Something_id" in SQL
Antwort
Was auch immer Sie tun, wählen Sie das eine oder andere und bleiben Sie bei diesem Standard. Es gibt Vor- und Nachteile für jeden.
Ich bevorzuge SomethingID
, aber andere Leute bevorzugen nur ID
. In dem System, mit dem ich arbeite, gibt es weit über tausend Tabellen und die Tatsache, dass der PK und der FK exakt die gleichen Namen haben, macht die Dinge einfacher.
Hallo KM, danke. Also solange es keinen klar überlegenen Weg gibt, denke ich, bleibe bei 'somethingID'. –
@tim peterson, hängt alles davon ab, wie Sie SQL verwenden und was für Sie funktioniert. Der Schlüsselpunkt der Abfrage besteht darin, die Informationen schnell zurück zu bekommen, und der Spaltenname wirkt sich nicht auf die Indexnutzung aus. –
Das absolut schlimmste Ding ist DBs, die mehr als eine Benennungskonvention verwenden. Ich habe an einem System gearbeitet, das 4 verschiedene Namenskonventionen für Ersatz-PKs verwendet. –
Es ist persönliche Vorliebe. Am Ende des Tages macht es keinen Unterschied. Ich persönlich bevorzuge mit nur Id
, wie ich auf das Feld finden (sagen wir Customer
Tabelle und Id
Feld) Customer.CustomerId
umständlich sein, wo Customer.Id
scheint mehr Sinn zu machen.
Ich würde vorschlagen, dass Sie eine Abkürzung für lange Namen verwenden und (etwas) Id (wie user_id
) für reguläre Tabellen verwenden. Also für die Tabelle customer_company_relation_metadata
verwenden Sie ccm_id
. Aber es ist gut, id
sowie
Bitte verwenden Sie keine Abkürzungen in diesem Zusammenhang, es verschleiert nur Ihren Code und ist für neue (er) Mitglieder Ihres Teams/Codes (und selbst Sie selbst nach einer Pause) weniger lesbar. Gute Lektüre: http://programmers.stackexchange.com/a/24083 – Styxxy
@Styxxy Ich habe gefunden, dass sie der nützlichste Weg zwischen langen Spaltennamen (die bei längeren Abfragen lästig sind) und der Verwendung von 'user. id 'die ganze Zeit. Aber es ist natürlich eine Frage des Geschmacks. –
Sehr lange Namen können abgekürzt werden, vielleicht.Ich würde es jedoch nicht für Benutzer verwenden (was sind diese 2 Buchstaben, wenn Sie viel in Lesbarkeit bezahlen?). Es ist in der Tat teilweise Ihre Präferenz, aber Abkürzung zu kürzen ist einfach nur falsch (ich würde nicht Code wie das beibehalten wollen). PS: Wenn Sie einen anständigen Editor haben, sollten auch lange Namen keine Rolle spielen. – Styxxy
id
ist nur eine bequeme Konvention - Sie können das Feld nichts nennen, solange Sie es als ein Schlüsselfeld zu deklarieren.
Das Vorfixieren der ID mit einem relevanten Kontext kann hilfreich sein, wenn es darum geht, Ihren Code zu lesen und zu schreiben, und verbessert insbesondere die Lesbarkeit beim Verbinden von Daten aus mehreren Tabellen und Fremdschlüsseln.
(* Nur ein Gedanke, weil deine Antwort meine Aufmerksamkeit auf sich gezogen hat und ich über Programmierung an ein Interface nachgedacht habe. *) Richtig, und ich stimme zu, aber der 'id'-Ansatz übersetzt Tabellensätze besser in Objekte, besonders wenn du einen abstrakten Super hast -Klasse mit einer ID-Eigenschaft. Wenn Sie das tun, was Sie vorschlagen (was ich auch tue), müssen Sie auch die verschiedenen 'blahId'-Felder und -Eigenschaften verwalten, wenn Sie Tabellen-Datensätze auf Objekte abbilden. Das würde für Fremdschlüssel gelten, die sowieso in Objekteigenschaften übersetzt werden, aber zumindest könnte die abstrakte Superklasse einfach eine einfache Eigenschaft namens 'id' haben. –
Es kann sowieso eine 'id'-Eigenschaft haben, aber Ihr Code wäre horizontaler über abstrakte Super-Klassen hinweg konsistenter, wenn wir die 'id' verwenden würden, besonders wenn Sie den Wert des' id'-Feldes der 'id'-Eigenschaft zuweisen. Die Übersichtlichkeit der Datenbank könnte darunter leiden, aber das kann gemildert werden, indem man "blahId" Namen fremder Schlüssel gibt. Diese Namen werden in die Objekte eindringen, aber Sie werden wissen, was was ist. –
Es ist eine Frage der Präferenz; Es ist jedoch von Vorteil, wenn Sie (etwas) ID verwenden, wenn Spaltennamen weniger eindeutig sind, wenn Sie Joins zwischen Tabellen durchführen.
ja, danke ich stimme zu, diese Frage kam zustande, wie ich mehr und mehr JOINs geschrieben habe ... –
Es gibt einen Vorteil für beide, wenn Sie Joins tun. Ich bevorzuge 'id' für den Spaltennamen, da ich die Tabellennamen sowieso vor den Spalten in * all * Joins auflisten werde, also ist 'tablename_id' oder etwas Ähnliches nur zusätzliche, nicht benötigte Spezifität. – 0b10011
@bfrohs: Ja, ich stimme zu, dass der Tabellenname im ID-Spaltennamen ein wenig mehr Tipparbeit beinhaltet. –
Es gibt Bündel von Artikeln gibt, gehen diese ein Check-out ...
Und am wichtigsten, wie KM oben sagte, wählen Sie einen & bleiben Sie dabei !!!! – larryr
'something_id' überflüssig ist, wenn Sie' table.id' überall verwenden können ... es sei denn, du bist einen fremden Schlüssel einstecken. –
Ich habe mich immer gewundert, was Leute über die Vor- und Nachteile der Ansätze denken – erikkallen
das Fremdschlüsselproblem ist der Grund, warum "ID" verwirrend sein kann - weil Sie dann eine Beziehung mit "somethingID" in einer anderen Tabelle erstellen müssen; Sie erstellen Beziehungen für Felder mit unterschiedlichen Namen. – niico