923 Stimmen

Datenbank-, Tabellen- und Spaltenbenennungskonventionen?

Wenn ich eine Datenbank entwerfe, frage ich mich immer, ob es einen besten Weg gibt, ein Element in meiner Datenbank zu benennen. Oft stelle ich mir die folgenden Fragen:

  1. Sollten Tabellennamen im Plural stehen?
  2. Sollten Spaltennamen Singular sein?
  3. Soll ich Tabellen oder Spalten vorangestellt werden?
  4. Sollte ich bei der Benennung von Artikeln Groß- und Kleinschreibung verwenden?

Gibt es irgendwelche empfohlenen Richtlinien für die Benennung von Elementen in einer Datenbank?

8 Stimmen

Ich denke, wir sollten den Plural für Tabellen und den Singular für Spalten verwenden.

7 Stimmen

Ich sehe eine Tabelle als "Speicher" mit mehreren Elementen, nicht als einzelne "Entität", daher nenne ich sie im Plural. Wenn ich Tabellen in Objekte umwandeln würde, würde ich die Objekte im Singular benennen. Dies ist nur meine persönliche Meinung.

4 Stimmen

@Tryinko Die Verwendung von ID überall ist die Hölle auf Erden für jeden, der mehrere Tabellen verknüpft. Der kleine Vorteil, dass man weiß, dass es sich um die PK handelt, wiegt auf keinen Fall den unglaublichen Ärger auf, die verdammte ID-Spalte in jeder verdammten Abfrage immer und immer wieder neu zu kalibrieren. Wenn Sie eine Möglichkeit wollen, PK in einer Tabelle zu kennzeichnen, machen Sie sie zur ersten Spalte. Auch die Angabe von FKs in den Namen von Spalten ist meiner Meinung nach ein weiteres böses Anti-Pattern.

385voto

urini Punkte 30897

Ich empfehle, sich die Microsoft SQL Server-Beispieldatenbanken anzusehen: https://github.com/Microsoft/sql-server-samples/releases/tag/adventureworks

Das AdventureWorks-Beispiel verwendet eine sehr klare und konsistente Benennungskonvention, die Schemanamen für die Organisation von Datenbankobjekten verwendet.

  1. Singuläre Namen für Tabellen
  2. Singuläre Namen für Spalten
  3. Schemaname für Tabellenpräfix (z. B.: Schemaname.Tabellenname)
  4. Pascal-Schreibweise (auch bekannt als Kamel-Großbuchstaben)

0 Stimmen

Was ist mit gespeicherten Prozeduren und Funktionen?

2 Stimmen

@Stu Thompson: Es klingt, als würde er sagen, dass man einen Schemanamen verwenden soll. anstelle von ein Präfix, sind Sie also sicher, dass es sich um -1 handelt?

0 Stimmen

@Emtucifor: Fair catch. Ich hatte es so interpretiert, dass es Tabellen mit Namen wie production_BillOfMatterials . Ich habe urinis Antwort zur Klarstellung bearbeitet (und damit ich meine Ablehnung rückgängig machen konnte). Es ist tatsächlich ein nicht trivialer Aufwand, die tatsächlichen AdventureWorks-Tabellennamen zu finden, wenn man nicht unter Windows arbeitet!

381voto

Patrick Karcher Punkte 22087

Die Antwort kommt spät, aber kurz und bündig:

  1. Plural der Tabellennamen: Meine Präferenz ist Plural
  2. Singuläre Spaltennamen: Ja
  3. Tabellen oder Spalten vorangestellt werden:
  • Tische : *In der Regel ist es am besten, keine Präfixe zu verwenden.
  • Rubriken : Nein.
  1. Verwenden Sie bei der Benennung von Elementen eine beliebige Groß- und Kleinschreibung: PascalCase sowohl für Tabellen als auch für Spalten.

Ausarbeitung:

(1) Was Sie tun müssen. Es gibt nur sehr wenige Dinge, die Sie muss eine bestimmte Art und Weise zu tun, jedes Mal, aber es gibt ein paar.

  • Ihr Name Primärschlüssel unter Verwendung des Formats "[singularOfTableName]ID". Das heißt, ob Ihr Tabellenname Kunde ou Kunden sollte der Primärschlüssel sein KundenID .
  • Weiter, Fremdschlüssel muss einheitlich benannt werden in verschiedenen Tabellen. Es sollte legal sein, jemanden zu verprügeln, der dies nicht tut. Ich würde behaupten, dass definierte Fremdschlüsselbegrenzungen zwar oft wichtig ist, ist eine konsistente Benennung der Fremdschlüssel immer wichtig
  • Ihre Datenbank muss Folgendes enthalten interne Konventionen . Auch wenn ich in späteren Abschnitten sehr flexibel sein werde, innerhalb Die Namensgebung einer Datenbank muss sehr konsistent sein. Ob Ihre Tabelle für Kunden nun heißt Kunden ou Kunde ist weniger wichtig als die Tatsache, dass Sie es in der gleichen Datenbank auf die gleiche Weise tun. Und Sie können eine Münze werfen, um zu entscheiden, wie Sie Unterstriche verwenden, aber dann müssen Sie müssen sie weiterhin auf dieselbe Weise verwenden . Wenn du das nicht tust, bist du ein schlechter Mensch, der ein geringes Selbstwertgefühl haben sollte.

(2) Was Sie wahrscheinlich tun sollten.

  • Felder, die dieselbe Art von Daten in verschiedenen Tabellen darstellen sollte gleich benannt werden. Sie sollten nicht Zip in einer Tabelle und ZipCode in einer anderen haben.
  • Um Wörter in Ihren Tabellen- oder Spaltennamen zu trennen, verwenden Sie PascalCasing. Die Verwendung von camelCasing wäre an sich nicht problematisch, aber das ist nicht die Konvention, und es würde komisch aussehen. Auf Unterstriche gehe ich gleich noch ein. (Sie dürfen ALLCAPS nicht mehr wie in den alten Zeiten verwenden. OBNOXIOUSTABLE.ANNOYING_COLUMN war in DB2 vor 20 Jahren in Ordnung, aber jetzt nicht mehr.)
  • Kürzen Sie Wörter nicht künstlich ab. Es ist besser, wenn ein Name lang und klar ist als kurz und verwirrend. Ultrakurze Namen sind ein Überbleibsel aus dunkleren, brutaleren Zeiten. Cus_AddRef. Was in aller Welt ist das? Custodial Addressee Reference? Zusätzliche Kundenerstattung? Benutzerdefinierte Adressreferenz?

(3) Was Sie beachten sollten.

  • Ich bin wirklich der Meinung, dass man Tabellen im Plural benennen sollte; andere meinen im Singular. Lesen Sie die Argumente an anderer Stelle. Spaltennamen sollten jedoch Singular sein. Selbst wenn Sie Tabellen im Plural benennen, können Tabellen, die Kombinationen anderer Tabellen darstellen, im Singular stehen. Zum Beispiel, wenn Sie eine Werbeaktionen und ein Artikel Tabelle könnte eine Tabelle, die einen Artikel darstellt, der Teil einer Werbeaktion ist, Promotions_Items heißen, aber ich denke, sie könnte auch Promotion_Items heißen (was die Eins-zu-Viel-Beziehung widerspiegelt).
  • Verwenden Sie Unterstriche konsequent und für einen bestimmten Zweck. Nur allgemeine Tabellennamen sollten mit PascalCasing klar genug sein; Sie brauchen keine Unterstriche, um Wörter zu trennen. Sparen Sie Unterstriche entweder (a) um eine assoziative Tabelle zu kennzeichnen oder (b) für Präfixe, auf die ich im nächsten Punkt eingehen werde.
  • Präfixe sind weder gut noch schlecht. Sie in der Regel ist nicht das Beste. In den ersten ein oder zwei db würde ich nicht empfehlen, Präfixe für die allgemeine thematische Gruppierung von Tabellen zu verwenden. Die Tabellen passen dann nicht mehr so leicht in die Kategorien, und das kann dazu führen, dass sie härter um Tabellen zu finden. Mit etwas Erfahrung können Sie ein Präfixierungsschema planen und anwenden, das mehr nützt als schadet. Ich habe einmal in einer Datenbank gearbeitet, deren Datentabellen mit tbl , Konfigurationstabellen mit ctbl , Ansichten mit vew , proc's sp und udf's fn und ein paar andere; es wurde sorgfältig und konsequent angewandt, so dass es gut funktioniert hat. Präfixe sind nur dann notwendig, wenn Sie wirklich getrennte Lösungen haben, die sich aus irgendeinem Grund in derselben Datenbank befinden; das Voranstellen von Präfixen kann bei der Gruppierung der Tabellen sehr hilfreich sein. Präfixe sind auch für besondere Situationen in Ordnung, z. B. für temporäre Tabellen, die Sie hervorheben möchten.
  • Sehr selten (wenn überhaupt) würden Sie sich Spalten vorangestellt werden.

13 Stimmen

"Felder, die dieselbe Art von Daten in verschiedenen Tabellen darstellen, sollten gleich benannt werden. Man sollte nicht Zip in einer Tabelle haben und ZipCode in einer anderen." Ja, ja, eine Million Mal ja. Sieht man unserer Datenbank an, dass sie nicht auf diese Weise konzipiert wurde? Eine Personennummer kann auf ein Dutzend verschiedene Arten bezeichnet werden, was sehr lästig zu pflegen ist. Ich habe mich bei allen Datenbanken, die ich entworfen habe, immer an diese Regel gehalten, und das macht das Leben viel einfacher.

118 Stimmen

Ich denke, der Primärschlüssel sollte einfach "ID" sein. Eine solche einfache Konvention macht den Primärschlüssel vorhersehbar und schnell identifizierbar. Ich würde jedoch den Tabellennamen ("PersonID") voranstellen, wenn er als Fremdschlüssel in anderen Tabellen verwendet wird. Diese Konvention könnte helfen, zwischen einem Primärschlüssel und Fremdschlüsseln in derselben Tabelle zu unterscheiden.

67 Stimmen

@Tryinko Die Verwendung von ID überall ist die Hölle auf Erden für jeden, der mehrere Tabellen verknüpft. Der kleine Vorteil, dass man weiß, dass es sich um die PK handelt, wiegt auf keinen Fall den unglaublichen Ärger auf, die verdammte ID-Spalte in jeder verdammten Abfrage immer und immer wieder neu zu kalibrieren. Wenn Sie eine Möglichkeit wollen, PK in einer Tabelle zu kennzeichnen, machen Sie sie zur ersten Spalte. Auch die Angabe von FKs in den Namen von Spalten ist meiner Meinung nach ein weiteres böses Anti-Muster.

105voto

Matt Hamilton Punkte 193704

Ok, wenn wir schon mal dabei sind, Meinungen zu äußern:

Ich glaube, dass Tabellennamen im Plural stehen sollten. Tabellen sind eine Sammlung (eine Tabelle) von Entitäten. Jede Zeile stellt eine einzelne Entität dar, und die Tabelle stellt die Sammlung dar. Ich würde also eine Tabelle mit Entitäten "Personen" (oder "Personen", je nachdem, was Ihnen besser gefällt) nennen.

Für diejenigen, die gerne einzelne "Entitätsnamen" in Abfragen sehen, würde ich Tabellen-Aliase verwenden:

SELECT person.Name
FROM People person

Ein bisschen wie LINQs "from person in people select person.Name".

Was 2, 3 und 4 betrifft, stimme ich mit @Lars überein.

1 Stimmen

@John Topley: Ich wette, Sie sagen nicht "die Daten sind", und daher sollten Sie kein wirkliches konzeptionelles Problem damit haben, dass Dinge, die mehrere sind, mit einem einzigen Namen bezeichnet werden. Wenn Sie Dinge im Plural benennen wollen, sehe ich das als eine einfache Vorliebe, die nichts mit der Anzahl der Zeilen in der Tabelle zu tun hat. Wenn Sie eine Datenbank voller singulärer Tabellennamen wie "Person", "Rechnung", "Adresse" usw. sehen würden, wären Sie dann wirklich verwirrt und würden denken, dass sie nur eine Zeile in jeder dieser Tabellen haben?

18 Stimmen

@Emtucifor: Im Englischen sagen wir nicht: "Look at all the person out there in that crowd of people!" Dass Sie ein konzeptionelles Problem damit haben, dass Dinge, die mehrere sind, mit einem einzigen Wort bezeichnet werden, ist zu erwarten. Es ist weder üblich noch angemessen. "Daten" ist eine Ausnahme und wird oft verwendet, um ein Stück einer Stoffmenge zu bezeichnen, ähnlich wie "Kuchen". "Möchten Sie (ein Stück) Kuchen?" Eine Tabelle "Personen" zu nennen, weil sie Informationen über mehrere Personen enthält, ist weitaus sinnvoller als sie "Person" zu nennen. Eine Datenklasse mit dem Namen "Person" für die ROW ist sinnvoll, ebenso wie einzelne Spaltennamen.

2 Stimmen

@Triynko Ich denke, es hängt alles davon ab, wie Sie über Tabellen denken und wie Sie sie verwenden. Tabellennamen werden in Abfragen verwendet; ob sie in ein bestimmtes starres englisches Satzmuster passen, hängt von Ihren persönlichen Vorlieben ab. Hier ist ein englischer Satz, der Ihren grammatikalischen Einwand problemlos umsetzt: "Gib mir alle Personenzeilen aus der gleichnamigen Tabelle." Wie auch immer, ich will damit sagen, dass Ihr begriffliches/sprachliches Argument nicht automatisch oder global ist - es ist nur die Art und Weise, wie Sie darüber denken wollen. Andere Wege sind genauso logisch.

85voto

Guy Punkte 9430

Ich arbeite in einem Datenbank-Supportteam mit drei DBAs und wir haben folgende Optionen in Betracht gezogen:

  1. Jede Benennungsnorm ist besser als keine Norm.
  2. Es gibt keinen "einzig wahren" Standard, wir alle haben unsere Vorlieben
  3. Wenn es bereits einen Standard gibt, sollten Sie ihn verwenden. Schaffen Sie keinen neuen Standard und verwässern Sie die bestehenden Standards nicht.

Wir verwenden Singularnamen für Tabellen. Den Tabellen wird in der Regel der Name des Systems (oder sein Akronym) vorangestellt. Dies ist nützlich, wenn das System komplex ist, da Sie das Präfix ändern können, um die Tabellen logisch zusammenzufassen (z. B. reg_customer, reg_booking und regadmin_limits).

Bei Feldern erwarten wir, dass die Feldnamen das Präfix/die Abkürzung der Tabelle enthalten (z. B. cust_address1), und wir bevorzugen auch die Verwendung eines Standardsatzes von Suffixen (_id für die PK, _cd für "Code", _nm für "Name", _nb für "Nummer", _dt für "Datum").

Der Name des Feldes "Fremdschlüssel" sollte derselbe sein wie der des Feldes "Primärschlüssel".

d.h.

SELECT cust_nm, cust_add1, booking_dt
FROM reg_customer
INNER JOIN reg_booking
ON reg_customer.cust_id = reg_booking.cust_id

Wenn Sie ein neues Projekt entwickeln, empfehle ich Ihnen, alle bevorzugten Entitätsnamen, Präfixe und Akronyme aufzuschreiben und dieses Dokument an Ihre Entwickler weiterzugeben. Wenn sie dann beschließen, eine neue Tabelle zu erstellen, können sie sich auf das Dokument beziehen, anstatt zu "raten", wie die Tabelle und die Felder heißen sollten.

9 Stimmen

Vor allem bei Nummer 3 hatten wir eine Gruppe von Leuten, die alle von derselben Firma eingestellt wurden und versuchten, ihren alten Namensstandard (den keiner von uns benutzte) auf alles anzuwenden, was sie taten. Sehr ärgerlich.

46 Stimmen

Das macht das SQL natürlich unlesbar, aber ich denke, ich kann es übersetzen. cust_nm sollte sein Kundenname , booking_dt sollte sein BookingDate . reg_customer, also ich habe keine Ahnung, was das ist.

3 Stimmen

@Ian. Die Absicht ist, dass Sie sich an die gewohnte Namensgebung halten und diese konsistent halten. Ich weiß IMMER, dass ein Datumsfeld _dt heißt, ein Namensfeld _nm. reg' ist ein Beispiel für ein "Registrierungssystem" (Buchungen, Kunden usw.), und alle zugehörigen Tabellen hätten das gleiche Präfix. Aber jedem das Seine...

55voto

Lars Mæhlum Punkte 5994
  1. Nein. Eine Tabelle sollte nach der Entität benannt werden, die sie repräsentiert. Person, nicht Personen, ist die Bezeichnung für denjenigen, den einer der Datensätze repräsentiert.
  2. Auch hier gilt das Gleiche. Die Spalte Vorname sollte wirklich nicht Vorname heißen. Es hängt alles davon ab, was Sie mit der Spalte darstellen wollen.
  3. NEIN.
  4. Ja. Der Klarheit wegen. Wenn Sie Spalten wie "Vorname" haben müssen, macht die Großschreibung die Lesbarkeit einfacher.

Okay. Das sind meine $0,02

5 Stimmen

Zur Klarstellung von Nummer 3: Präfixe sind eine Möglichkeit, Metadaten in den Spaltennamen einzubetten. Aus denselben Gründen wie bei der (übermäßigen Verwendung der) ungarischen Notation sollte es in einer modernen DB keine Notwendigkeit geben, dies zu tun.

32 Stimmen

Select top 15 from order' oder 'select top 15 from orders'? Letzteres ist meine (menschliche) Vorliebe.

0 Stimmen

@Ian Boyd: Sie schreiben SQL tatsächlich von Hand? ;)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X