Gibt es eine Namenskonvention für MySQL?

162

So mache ich das:

  1. Tabellennamen sind niedriger Fall verwendet Unterstrichen um Worte zu trennen, und sind Einzahl (zB foo, foo_barusw.
  2. Ich habe im Allgemeinen (nicht immer) eine Auto-Inkrement-PK. Ich verwende die folgende Konvention: tablename_id(zB foo_id, foo_bar_idusw.).
  3. Wenn eine Tabelle eine Spalte enthält, die ein Fremdschlüssel ist, kopiere ich einfach den Spaltennamen dieses Schlüssels aus der Tabelle, aus der er stammt. Angenommen, die Tabelle foo_barhat die FK foo_id(wo foo_idist die PK von foo).
  4. Bei der Definition von FKs zur Durchsetzung der referenziellen Integrität verwende ich Folgendes: tablename_fk_columnname(z. B. Beispiel 3 foo_bar_foo_id). Da es sich um eine Kombination aus Tabellenname und Spaltenname handelt, ist garantiert, dass sie innerhalb der Datenbank eindeutig ist.
  5. Ich ordne die Spalten wie folgt: PKs, FKs, dann den Rest der Spalten alphabetisch

Gibt es einen besseren, standardisierteren Weg, dies zu tun?

StackOverflowNewbie
quelle
6
Ist es falsch, für die automatische Inkrementierung von PK nur "id" zu verwenden? Warum? Der Name der Spalte hat nur im Kontext der Tabelle eine Bedeutung. Ich habe also eine "ID" in jeder Tabelle und möglicherweise viele IDs <Tabellenname> für FK.
Zbyszek
3
@Zbyszek Ich denke, der einfachste Grund dagegen ist einfach die Konsistenz / Einfachheit. Anstatt id_tableB=> oh keine anders benannte Spalte zu haben id , sieht die Konsistenz von id_tableB=> id_tableBeinfach ordentlicher aus ... oder wie OP es tut: foo_id=> foo_idstatt foo_id=>id
Don Cheadle

Antworten:

106

Ich würde das in erster Linie sagen: Seien Sie konsequent.

Ich denke, Sie sind mit den Konventionen, die Sie in Ihrer Frage skizziert haben, fast da. Ein paar Kommentare:

Die Punkte 1 und 2 sind meiner Meinung nach gut.

Punkt 3 - leider ist dies nicht immer möglich. Überlegen Sie , wie Sie mit einer einzigen Tabelle zu bewältigen wäre , foo_bardie Spalten foo_idund die another_foo_idbeide die Referenztabellenspalte.foo foo_idVielleicht möchten Sie überlegen, wie Sie damit umgehen sollen. Dies ist allerdings ein bisschen wie ein Eckfall!

Punkt 4 - Ähnlich wie Punkt 3. Möglicherweise möchten Sie am Ende des Fremdschlüsselnamens eine Zahl einfügen, um mehr als eine Referenzierungsspalte zu erhalten.

Punkt 5 - Ich würde dies vermeiden. Es bietet Ihnen wenig und wird zu Kopfschmerzen, wenn Sie zu einem späteren Zeitpunkt Spalten zu einer Tabelle hinzufügen oder daraus entfernen möchten.

Einige andere Punkte sind:

Konventionen zur Indexbenennung

Möglicherweise möchten Sie eine Namenskonvention für Indizes einführen. Dies ist eine große Hilfe für alle Datenbankmetadaten, die Sie möglicherweise ausführen möchten. Zum Beispiel möchten Sie vielleicht nur einen Index aufrufen foo_bar_idx1oder foo_idx1- ganz nach Ihren Wünschen, aber eine Überlegung wert.

Singular vs Plural Spaltennamen

Es könnte eine gute Idee sein, das heikle Problem von Plural vs Single in Ihren Spaltennamen sowie in Ihren Tabellennamen anzusprechen. Dieses Thema führt häufig zu großen Debatten in der DB-Community. Ich würde mich an singuläre Formen sowohl für Tabellennamen als auch für Spalten halten. Dort. Ich habe es gesagt.

Die Hauptsache hier ist natürlich Konsistenz!

Tom Mac
quelle
Was wäre besser als Punkt 5? Warum könnte es Kopfschmerzen werden?
Rasshu
7
Um nachzufolgen, fand ich diese sehr hilfreich für diejenigen, die später hierher kommen werden: launchbylunch.com/posts/2014/Feb/16/sql-naming-conventions/…
Enissay
1
Ich habe Probleme, ein gutes "Schema" für die Benennung meiner Tabellen zu finden, die Objekte von Modellen enthalten, die aus zwei Namen bestehen (DocumentChapter, DocumentVersion, DocumentType usw.). Zum Beispiel für DocumentType könnte ich es benennen documenttypeoder document_type. Ich würde das letztere bevorzugen, aber die meiste Zeit habe ich eine Beziehung von vielen zu vielen und ich brauche einen Tisch, der aussieht wie document_document_type. Irgendwelche Vorschläge, wie man damit umgeht?
Lexith
@ rsb2097 Betreff: Punkt 5 - Nach dem Hinzufügen einer Spalte (am Ende) kann die Reihenfolge ungültig werden. Sie sollten keine Einschränkung hinzufügen, die eine Neuordnung der Spalten erfordert, da dies einen unnötigen Overhead darstellt.
Will Sheppard
21

Konsistenz ist der Schlüssel zu jedem Namensstandard. Solange es logisch und konsistent ist, sind Sie zu 99% da.

Der Standard selbst ist eine sehr persönliche Präferenz. Wenn Ihnen Ihr Standard gefällt, können Sie ihn ausführen.

Um Ihre Frage direkt zu beantworten - nein, MySQL hat keine bevorzugte Namenskonvention / Standard, daher ist es in Ordnung, Ihre eigenen zu rollen (und Ihre scheint logisch).

mal-wan
quelle
4

Zum Glück sind PHP-Entwickler keine "Camel Case Bigots" wie einige mir bekannte Entwicklungsgemeinschaften.

Ihre Konventionen klingen gut.

Nur solange sie a) einfach und b) konsistent sind - ich sehe keine Probleme :)

PS: Ich persönlich denke 5) ist übertrieben ...

paulsm4
quelle
2
Kamelfälle sind keine Bigots, sondern werden von vielen Mitgliedern der DB-Community verpönt, da einige der RDBMS die Groß- und Kleinschreibung nicht berücksichtigen, bis sie Fälle entfernen (oder alles in Großbuchstaben umwandeln), sodass die Dinge sehr schnell sehr hässlich werden.
Mal-Wan
@mwan: Kannst du angeben, welches RDBMS '? Und ich bin selbst ein Kameljockey. Großbuchstaben dienen in meinem Schema nur einem Zweck, Verknüpfungstabellen anzugeben und (im Fall von Feldern) Wortgrenzen anzugeben, so dass das _ ausschließlich eine andere Tabellen-ID angeben kann (dh Tabellenname = andere Tabelle und Feld in dieser Tabelle = ID) ). Außerdem, wenn das andere RDBMS nicht zwischen Groß- und Kleinschreibung unterscheidet, was macht es dann wirklich aus? Ich werde niemals eine Groß- und Kleinbuchstabenversion derselben Tabelle haben! Oh, und ich würde ein RDBMS ohne Berücksichtigung der Groß- und Kleinschreibung nicht bevorzugen - ich würde lieber konsistenten Code schreiben
Samuel Fullman
7
Ich mag die Ironie der MySQL-Benutzer, die CamelCase nicht mögen, und den Namen des Produkts, das wir verwenden: MySQL, geschrieben in CamelCase
DBX12
1
@ DBX12 Um pedantisch zu sein, das ist PascalCase, nicht camelCase, aber Ihr Punkt bleibt bestehen.
MarredCheese
@MarredCheese Ich habe nie darüber nachgedacht, aber du hast recht. camelCase sollte zu Beginn keinen Buckel haben.
DBX12
1

Einfache Antwort: NEIN

Nun, zumindest eine Namenskonvention als solche, die von Oracle oder der Community empfohlen wird. Nein, im Grunde müssen Sie sich jedoch der Einhaltung der Regeln und Grenzwerte für Bezeichner bewusst sein, wie in der MySQL-Dokumentation angegeben: https://dev.mysql.com /doc/refman/8.0/de/identifiers.html

In Bezug auf die Namenskonvention, die Sie befolgen, halte ich es für in Ordnung, nur die Nummer 5 ist ein wenig unnötig. Ich denke, die meisten visuellen Tools zum Verwalten von Datenbanken bieten eine Option zum Sortieren von Spaltennamen (ich verwende DBeaver und es hat es) Wenn der Zweck eine schöne visuelle Darstellung Ihres Tisches hat, können Sie diese Option verwenden, die ich erwähne.

Aus persönlicher Erfahrung würde ich Folgendes empfehlen:

  • Verwenden Sie Kleinbuchstaben . Dies stellt fast die Interoperabilität sicher, wenn Sie Ihre Datenbanken von einem Server auf einen anderen migrieren. Manchmal lower_case_table_namesist das nicht richtig konfiguriert und Ihr Server wirft Fehler aus, indem er einfach Ihren camelCase- oder PascalCase-Standard nicht erkennt (Groß- / Kleinschreibung beachten).
  • Kurznamen . Einfach und klar. Je einfacher und schneller es ist, Ihre Tabelle oder Spalten zu identifizieren, desto besser. Vertrauen Sie mir, wenn Sie in kurzer Zeit viele verschiedene Fragen stellen, ist es besser, alles einfach zu schreiben (und zu lesen).
  • Vermeiden Sie Präfixe . Verwenden Sie keine Präfixe, es sei denn, Sie verwenden dieselbe Datenbank für Tabellen verschiedener Anwendungen. Dies verleiht Ihren Abfragen nur mehr Ausführlichkeit. Es gibt Situationen, in denen dies nützlich sein kann, z. B. wenn Sie Primärschlüssel und Fremdschlüssel identifizieren möchten, bei denen normalerweise Tabellennamen als Präfix für ID-Spalten verwendet werden.
  • Verwenden Sie Unterstriche zum Trennen von Wörtern . Wenn Sie immer noch mehr als ein Wort zum Benennen einer Tabelle, Spalte usw. verwenden möchten, verwenden Sie Unterstriche zum Trennen der Wörter. Dies hilft der Lesbarkeit (Ihre Augen und Ihr gestresstes Gehirn werden es Ihnen danken).
  • Seien Sie konsequent . Wenn Sie Ihren eigenen Standard haben, folgen Sie ihm. Sei nicht die Person, die die Regeln erstellt und die erste, die sie bricht, das ist beschämend.

Und was ist mit der Benennung "Plural vs Singular"? Nun, dies ist meistens eine Situation persönlicher Vorlieben. In meinem Fall versuche ich, Pluralnamen für Tabellen zu verwenden, da ich denke, dass eine Tabelle eine Sammlung von Elementen oder ein Paket ist, das Elemente enthält. Daher ist ein Pluralname für mich sinnvoll. und singuläre Namen für Spalten, weil ich Spalten als Attribute sehe, die diese Tabellenelemente singulär beschreiben.

Fabrizio Valencia
quelle