Tabellennamen: Unterstrich gegen Camelcase? Namespaces? Singular gegen Plural?

85

Ich habe ein paar Fragen / Antworten auf StackOverflow gelesen, um die 'besten' zu finden, oder sollte ich sagen, muss akzeptiert werden, um Tabellen in einer Datenbank zu benennen.

Die meisten Entwickler neigen dazu, die Tabellen abhängig von der Sprache zu benennen, für die die Datenbank erforderlich ist (JAVA, .NET, PHP usw.). Ich habe jedoch das Gefühl, dass dies nicht richtig ist.

Die Art und Weise, wie ich bisher Tabellen benannt habe, ist wie folgt:

doctorsMain
doctorsProfiles
doctorsPatients
patientsMain
patientsProfiles
patientsAntecedents 

Die Dinge, die mich betreffen, sind:

  • Lesbarkeit
  • Schnelle Identifizierung des Moduls, von dem die Tabelle stammt (Ärzte || Patienten)
  • Leicht zu verstehen, um Verwirrungen zu vermeiden.

Ich würde gerne Meinungen zu Namenskonventionen lesen. Danke dir.

MarioRicalde
quelle

Antworten:

173

Konsequent zu sein ist weitaus wichtiger als das von Ihnen verwendete Schema.

David Oneill
quelle
21
Mit anderen Worten, ja, gut gemacht, Sie haben einige konsistente Schemata identifiziert. Mach weiter!
Phil H
3
+1 für den Kommentar. Nebenbei bemerkt zum aktuellen Namensschema ist PascalCase besser, insbesondere wenn Sie keine Aliase für die SQL-Abfragen verwenden. Auf diese Weise können Sie nur camelcase für die Tabellenspaltennamen und Pascal Case für die Tabellennamen verwenden.
MarioRicalde
3
Pascal / Kamel-Fall für Tabellennamen kann zu einigen Problemen führen. Jede Tabelle enthält eine Datei im Dateisystem, bei einigen wird die Groß- und Kleinschreibung nicht berücksichtigt (z. B. OSX).
Ismriv
2
@ismriv Das ist nur dann ein Problem, wenn Sie inkonsistent sind. Wenn Sie sich immer auf Tabellen / Ansichten / Spalten mit demselben konsistenten Fall beziehen, sollten Sie keine Probleme haben. Wenn Sie beim Schreiben dieser Namen nicht faul sind, erhalten Sie einen großen Gewinn Vorteil später beim Lesen. Die Verwendung von PascalCase für Tabellen und camelCase für Spalten hilft dabei, den Typ eines Namens auf einen Blick zu identifizieren, und ahmt außerdem gängige objektorientierte Konventionen nach.
TWiStErRob
Ich bin vollkommen einverstanden , dass die Konsistenz Schlüssel ist, aber das ist eine alte Frage und für Menschen mit neueren Datenbankplattformen wie Redshift und Snowflake , dass auf dem Standard entweder all Groß- oder Kleinschreibung Identifikatoren, würde ich hinzufügen , dass es ist sehr wichtig , darüber nachzudenken , Ihr Namenskonventionen gleich zu Beginn. Wenn Sie sich für die Verwendung einer Namenskonvention wie Camel Case auf diesen Plattformen entscheiden, kann dies später zu unnötigen Kopfschmerzen führen, z. B. müssen Sie ständig Anführungszeichen in Anführungszeichen verwenden, und die Auflösung von Objektnamen kann zu unerwarteten Ergebnissen führen.
Nathan Griffiths
19

Ich benutze normalerweise PascalCase und die Entitäten sind singulär:

DoctorMain
DoctorProfile
DoctorPatient

Es ahmt die Namenskonventionen für Klassen in meiner Anwendung nach und hält alles ziemlich ordentlich, sauber, konsistent und für alle leicht verständlich.

Justin Niessner
quelle
3
Ja ja mache ich. Ich bin heute Morgen ein bisschen neblig. Die Bearbeitung vornehmen ... danke.
Justin Niessner
3
Es ist auch als "CapitalCase" bekannt.
CorsiKa
3
Ich habe in meiner 30-jährigen Erfahrung noch nie gehört, dass es "CapitalCase" heißt. Ich habe gehört, dass es am häufigsten "Kamelfall" genannt wird und "Pascal-Fall" in jüngerer Zeit aufgegriffen wurde. Ich bin hierher gekommen, um zu sehen, warum Leute Camel Case für SQL verwenden, obwohl es in der Vergangenheit größtenteils zwischen Groß- und Kleinschreibung unterschieden hat. Ich möchte auf keinen Fall hinter die Zeit zurückfallen.
Sinthia V
@SinthiaV Ich weiß nichts über andere, aber in unserem Fall, da wir ein JS-ORM verwenden (leider), waren die Optionen 1) Konvention durch Verwendung von camelCase in der Datenbank brechen 2) Konvention durch Verwendung von snake_case in JS 3) Karte camelCase brechen in JS zu snake_case in db. Wir haben uns ohne anfängliche Überlegungen entschieden, camelCase in der Datenbank zu verwenden, und es war nicht so schlimm, aber alles zu zitieren ist ein bisschen mühsam.
Andy
@SinthiaV als nutzloser Kommentar könnte dies im Zusammenhang mit der eigentlichen SO-Frage stehen, PascalCase ist nicht dasselbe wie camelCase. PascalCase schreibt den ersten Buchstaben jedes Wortes groß (entscheidend einschließlich des ersten), während camelCase nur die Wörter nach dem ersten groß schreibt. Weiterführende Literatur: medium.com/better-programming/…
neugieriger
11

Bei SQL-Unterstützungen wird die Groß- und Kleinschreibung nicht berücksichtigt Underscores_Scheme. Moderne Software unterstützt jedoch jede Art von Namensschema. Manchmal können jedoch einige böse Fehler, Irrtümer oder menschliche Faktoren dazu führen, UPPERCASINGEVERYTHINGdass diejenigen, die beide Pascal_Caseund das Underscore_CaseSchema ausgewählt haben , mit all ihren Nerven an einem guten Ort leben.

terR0Q
quelle
10

Eine Zusammenfassung der meisten der oben genannten:

  • Verlassen Sie sich nicht auf den Fall in der Datenbank
  • Betrachten Sie nicht den Groß- oder Kleinschreibungsteil des Namens - nur die Wörter
  • Verwenden Sie ein Trennzeichen oder einen Fall, der für Ihre Sprache der Standard ist

Dann können Sie Namen einfach (sogar automatisch) zwischen Umgebungen übersetzen.

Aber ich möchte noch eine weitere Überlegung hinzufügen: Möglicherweise stellen Sie fest, dass es andere Faktoren gibt, wenn Sie von einer Klasse in Ihrer App zu einer Tabelle in Ihrer Datenbank wechseln: Das Datenbankobjekt verfügt über Ansichten, Trigger, gespeicherte Prozesse, Indizes, Einschränkungen usw. - das brauche auch Namen. So können Sie beispielsweise nur über Ansichten auf Tabellen zugreifen, bei denen es sich normalerweise nur um ein einfaches "select * from foo" handelt. Diese können als Tabellenname mit nur dem Suffix '_v' identifiziert werden, oder Sie können sie in ein anderes Schema einfügen. Der Zweck einer solchen einfachen Abstraktionsschicht besteht darin, dass sie bei Bedarf erweitert werden kann, um Änderungen in einer Umgebung zuzulassen, um Auswirkungen auf die andere zu vermeiden. Dies würde die obigen Namensvorschläge nicht brechen - nur ein paar weitere Dinge, die berücksichtigt werden müssen.

KenFar
quelle
8

Ich benutze Unterstriche. Ich habe vor einigen Jahren ein Oracle-Projekt durchgeführt, und es schien, als hätte Oracle alle meine Objektnamen in Großbuchstaben geschrieben, was jedes Gehäuseschema in die Luft jagt. Ich bin nicht wirklich ein Oracle-Typ, also gab es vielleicht einen Weg, den ich nicht kannte, aber ich habe Unterstriche verwendet und bin nie zurückgegangen.

Strahl
quelle
2
Ab 11g scheint die Groß- und Kleinschreibung erhalten zu bleiben, wenn der Tabellenname in doppelte Anführungszeichen gesetzt wird. Setzen Sie dies hier als zukünftige Referenz. Ich weiß mit Sicherheit, dass Postgres dies auch tut, andere DB-Motoren möglicherweise nicht.
John O
7

Da die Frage nicht spezifisch für eine bestimmte Plattform oder DB-Engine ist, muss ich für maximale Portabilität sagen, dass Sie immer Tabellennamen in Kleinbuchstaben verwenden sollten.

/ [a-z _] [a-z0-9 _] * / ist wirklich das einzige Muster von Namen, das nahtlos zwischen verschiedenen Plattformen übersetzt wird. Kleinbuchstaben alphanumerisch + Unterstrich funktionieren immer konsistent.

Wie an anderer Stelle erwähnt, sollten Beziehungs- (Tabellen-) Namen singulär sein: http://www.teamten.com/lawrence/programming/use-singular-nouns-for-database-table-names.html

reiches remer
quelle
Ich stimme zu - der Unterstrich hat im Vergleich zu Pascal oder Camel Casing die geringsten Probleme. Besonders wenn Sie Namen zu Modellen, dto und Frontend am Ende reisen.
Saulius
6

Ich stimme eher den Leuten zu, die sagen, dass dies von den Konventionen der von Ihnen verwendeten Sprache abhängt (z. B. PascalCase für C # und snake_case für Ruby).

Niemals camelCase.

Mark Rendle
quelle
2
Ada: Pascal_Case_With_Underscores
uetoyo
6
Dies ist nicht sinnvoll, wenn Sie in zwei verschiedenen Sprachen mit unterschiedlichen Namenskonventionen auf dieselbe Tabelle zugreifen möchten.
Daniel W.
5

Nachdem ich viele andere Meinungen gelesen habe, denke ich, dass es sehr wichtig ist, die Namenskonventionen der Sprache zu verwenden. Konsistenz ist wichtiger als Namenskonventionen nur, wenn Sie der einzige Entwickler der Anwendung sind (und sein werden). Wenn Sie Lesbarkeit wünschen (was von großer Bedeutung ist), verwenden Sie besser die Namenskonventionen für jede Sprache. In MySQL zum Beispiel empfehle ich nicht, CamelCase zu verwenden, da nicht alle Plattformen zwischen Groß- und Kleinschreibung unterscheiden. Hier geht der Unterstrich also besser.

Vlad Manuel Mureșan
quelle
1
Absolute Zustimmung!!! Besonders mit MySql, wenn Sie es unter Windows ausführen, wird alles von camelCasebis camelcase. Schlangenkoffer zu haben ist also viel besser. Auch über Modern software however supports any kind of naming schemeSie haben keine Garantien, dass yop Code für die letzte Version soft schreibt. Insbesondere für Datenbankversionen ist die Aktualisierung der Version nicht trivial, wenn Sie an Regressionskosten denken.
Cherry
2

Das sind meine fünf Cent. Ich bin zu dem Schluss gekommen, dass es zwei beste Möglichkeiten gibt, wenn DBs von verschiedenen Anbietern für ein Projekt verwendet werden:

  1. Verwenden Sie Unterstriche.
  2. Verwenden Sie Kamel Fall mit Anführungszeichen.

Der Grund ist, dass einige Datenbanken alle Zeichen in Großbuchstaben und andere in Kleinbuchstaben konvertieren. Also, wenn Sie es haben myTable, wird MYTABLEoder mytablewann Sie mit DB arbeiten werden.

Pavel_K
quelle
1

Leider gibt es keine "beste" Antwort auf diese Frage. Wie @David feststellte, ist Konsistenz weitaus wichtiger als die Namenskonvention.

Kane
quelle
1

Die Trennung von Wörtern ist sehr unterschiedlich. Sie müssen also auswählen, was Ihnen besser gefällt. Gleichzeitig scheint es nahezu Konsens zu geben, dass der Tabellenname singulär sein sollte.

Javier
quelle
1

Namenskonventionen existieren im Rahmen einer Sprache, und verschiedene Sprachen haben unterschiedliche Namenskonventionen.

SQL unterscheidet standardmäßig nicht zwischen Groß- und Kleinschreibung. Daher ist snake_case eine weit verbreitete Konvention. SQL unterstützt auch begrenzte Bezeichner. Also gemischter Fall in einer Option wie camelCase (Java, wo Felder == Spalten) oder PascalCase (C #, wo Tabellen == Klassen und Spalten == Felder). Wenn Ihre DB-Engine den SQL-Standard nicht unterstützen kann, ist dies das Problem. Sie können sich dafür entscheiden, damit zu leben oder einen anderen Motor zu wählen. (Und warum C # einfach anders sein musste, ist ein Punkt der Erschwerung für diejenigen von uns, die in beiden codieren.)

Wenn Sie beabsichtigen, in Ihren Diensten und Anwendungen immer nur eine Sprache zu verwenden, verwenden Sie die Konventionen dieser Sprache auf allen Ebenen. Verwenden Sie andernfalls die am häufigsten verwendeten Konventionen der Sprache in dem Bereich, in dem diese Sprache verwendet wird.

Chris Golledge
quelle