Plural vs Singular Tabellenname


41

Wie soll ich meine Tabellen beim Erstellen einer neuen Datenbank benennen?

Singular: Clientoder Plural Clients:?


Ich hatte einmal einen Kollegen, der darauf bestand, dass Tabellennamen Singular und Ansichtsnamen Plural sein sollten.
René Nyffenegger

1
Es gibt andere Denkrichtungen. 1) Verwenden Sie Verben, mit denen Abfragen in natürlicher Sprache ausgedrückt werden können, z. B. person NAMED 'fred' EARNS 20,000(wobei die Namen in Großbuchstaben die Tabellen sind). 2) verwenden , den Namen des Unternehmens für die Sets zum Beispiel PERSONNEL, PAYROLL, ORG_CHARTetc.
onedaywhen

3
Mögliches Cross-Site-Duplikat: stackoverflow.com/questions/338156/…
Ciro Santilli am

Antworten:


44

Wie du willst. Sei aber einfach konsequent.

Persönlich bevorzuge ich Singular basierend auf dem, was in jeder Zeile gespeichert ist: Bestellung, Produkt, Benutzer, Artikel usw.

Dies entspricht meiner Modellierung (über Objektrollenmodellierung), bei der ich singuläre Entitäten / Typen verwende.

Bearbeiten:

Ein Grund dafür ist , dass mehrere schlägt fehl , wenn Sie Link - Tabellen haben:
Orders, Productsgeben würde OrderProductsoder OrdersProducts. Weder klingt richtig

Oder Verlaufstabellen (natürlich können Sie dafür Schemata verwenden):
Orders-> OrdersHistoryoder (nein!) OrdersHistories? Wäre nicht Order-> OrderHistorybesser?


2
Sollte es sich immer um eine persönliche Entscheidung handeln? Was wäre, wenn zwei Personen in einem Datenbankentwurf arbeiten würden, dann könnte einer die Tabellen als Plural und der andere als Singular bezeichnen. Gibt es keine stichhaltigen Gründe für die Verwendung von Singularoder Plural?
John Isaiah Carmona

2
@JohnIsaiahCarmona: hat einen Grund hinzugefügt
gbn

3
Ich bin damit einverstanden, Singular als das sinnvollste zu verwenden. Dies scheint nicht die gängige Meinung zu sein, wenn man sich hier und in Bezug auf SO usw. umschaut. Viele Leute scheinen Tabellen programmtechnisch als Sammlungen zu betrachten, die daher Pluralnamen haben sollten. Ich denke, dass vielleicht ORMs anfangen, Leute von dieser (schlechten) Angewohnheit abzubrechen. Wenn Ihre Tabellen zunächst mehrere Namen haben, ist es schwierig, übergeordnete und untergeordnete Navigationseigenschaften sowie Instanz- und Auflistungsobjekte für eine Tabelle zu unterscheiden.
Joel Brown

4
Ein weiterer Grund für Singular ist, wenn Sie die Regel haben, dass die PK nach dem Tabellennamen benannt ist, z. B. TablenameIDoder TablenameCodeoder tablename_id. Bei Plural-Tabellennamen landen Sie bei Orders.OrdersID(was nicht richtig aussieht) oder dort, Orders.OrderIDwo Sie Plural für Tabellennamen verwenden, bei Spaltenpräfixen jedoch Singular.
ypercubeᵀᴹ

Ein weiterer Punkt in die gleiche Richtung.
Jack Douglas

8

Bezüglich der Namen von Singular- und Plural-Tabellen scheint das Thema kontrovers zu sein, sollte es aber nicht sein.

Während eine Tabelle eine Sammlung mehrerer Datensätze ist, wird eine Tabelle nach der Definition des einen Datensatztyps benannt, den sie enthält. Wenn eine Tabelle einen anderen Namen als den des darin enthaltenen Datensatztyps haben darf, können Sie der Tabelle einen Pluralnamen geben, sodass Sie beispielsweise eine Employees-Tabelle haben können, die mehrere Employee-Datensätze enthält. Der SQL-Designer hat jedoch keine separaten Namen für Tabellen und Datensatztypen angegeben.

Bei objektorientierten Programmen, die die Daten verwenden, ist es logischer, wenn der Name eines Datensatztyps (und damit der Tabellenname) singulär bleibt, da er dem Namen der Klasse entspricht, die Sie zur Beschreibung eines Datensatzes verwenden würden .

Wenn Sie dann eine Sammlung im Programm identifizieren möchten, können Sie einen Plural oder besser einen geeigneten Modifikator verwenden, z. B. EmployeeList oder EmployeeArray.

Es gibt auch ein Problem mit unregelmäßigen Pluralformen für die automatische Codegenerierung und Programmierer, die unterschiedliche sprachliche Hintergründe oder Vorstellungen zur Bildung von Pluralformen in einem Programm haben.

Die englische Sprache ist keine gute und richtige Programmiersprache, und der Versuch, Datenbank- und Programmanweisungen mit der englischen Sprache in Einklang zu bringen, weil es besser klingt, eine dieser Anweisungen zu lesen, ist ein Fehler.


5

Genau wie bei der Antwort von @ gbn denke ich, dass dies eine Frage der Präferenzen ist, und genau wie bei ihm empfehle ich, dass jede Auswahl, die Sie getroffen haben, überall angewendet wird (zumindest in dieser DB). Konsistenz ist es wert.

Ich bevorzuge jedoch, dass ein Plural in SELECTAussagen besser klingt :

SELECT Id, Name, Status 
FROM   Persons
WHERE  Status <> 5  --5 meaning deleted

Ich meine, zumindest in diesem Fall befinden sich mehrere Personen in der Tabelle und einige von ihnen werden an den Kunden zurückgegeben.


2
+ 1 obwohl technisch gesehen der Plural von Person People ist und dies ein Grund ist, warum ich Singular benutze. Einige ORMs erstellen automatisch die Tabellen für Sie und Sie erhalten komische Szenarien wie diese, in denen die Benennung sprachlich nicht logisch ist.
Mr. Brownstone

5

"order" ist ein reserviertes Wort. "Bestellungen" gibt es nicht

"user" ist ein reserviertes Wort. "Benutzer" ist nicht

"session" ist ein reserviertes Wort. "Sessions" gibt es nicht

"result" ist ein reserviertes Wort. "Ergebnisse" gibt es nicht

"relative" ist ein reserviertes Wort. "Verwandte" ist nicht

...

Dies scheinen gebräuchliche Wörter zu sein, die in die Datenbank der Branche aufgenommen werden könnten. Mehrere Wörter scheinen als Schlüsselwörter weniger verbreitet zu sein als einzelne Wörter. Daher kann es hilfreich sein, mehrere Tabellennamen zu verwenden, um Konflikte mit SQL-Schlüsselwörtern zu vermeiden.


1
Dies ist der Klarheit halber zu nahe. Halte dich einfach fern von reservierten Wörtern, Singular oder Plural. Das hilft wirklich beim Debuggen von Fehlermeldungen, bei denen mehrere reservierte Wörter austauschbar sind. Wählen Sie im Idealfall Wörter aus der Domäne der Anwendung aus, um sie für die Verwendung / den Benutzer relevanter zu machen.
Emacs User

Was bedeutet "zu nah für Klarheit"?
Neil McGuigan

1
Es bedeutet einen unnötigen höheren Overhead bei der Entschlüsselung von Fehlermeldungen. Zum Beispiel order by und orders in Syntaxfehlermeldungen. Oder versuchen Sie, Benutzer und Benutzer in Authentifizierungsfehlermeldungen zu debuggen.
Emacs User

IMO PurchaseOrder, PortalUser, UserSession sind besser als nur Order, User, Session. In diesem Szenario könnte dies so gut funktionieren
John Jai

1

Ich glaube, SQL-Tabelle sollte Pluralnamen haben. Es liest sich einfach viel besser.

Eine Tabelle mit Bucheinträgen sollte als Bücher bezeichnet werden. Der ORM sollte dieselbe Konvention verwenden. Das Books-Objekt ist eine Sammlung und verwaltet alle Datensätze in der Books-Tabelle. Ein Buchobjekt steht über einem einzelnen Datensatz.

Dies macht die Codierung natürlicher.

select name, publication_date from books where publication_date > '2000-01-01';

books = Books()
for book in books.get("publication_date >= '2000-01-01'"):
    print book.name

Macht Sinn, bis Sie in seep.get für Schafe schreiben müssen ... Biegeregeln , flexibel sein.
Emacs User

Richtig, einige Container sind Wörter mit nicht pluralartigen Substantiven - wie 'access'. aber man kann modifizieren mit: 'for access_record in access'.
dlink

Fährt mich allerdings ein bisschen nervös, wenn ich Linkobjekte sehe. Wie wäre es mit einer Verknüpfungstabelle zwischen Büchern und Autoren? "BooksAuthors" sieht und hört sich schrecklich an, aber "BookAuthor" sieht und hört sich besser an. Dann kommen Sie zu Wörtern mit ungeraden Endungen für Pluralformen (Status) oder unregelmäßigen Substantiven (Kind gegen Kind). IMO eine Welt der Augenschmerzen!
Blobbles

Hallo, @blobbles der Plural wäre BookAuthors, nicht BooksAuthors. So liest es sich immer noch natürlich. BookPublishers, BookFormats, etc.
dlink

Die Lesbarkeit ist immer gut, aber es geht nicht um einen Satz, sondern um die Orte, von denen wir Daten erhalten. zB table.fieldist so author.authorNamevollkommen in Ordnung. Holen Sie sich den authorName aus der author-Tabelle. Wenn es nur einen Autor gibt, sieht der Plural auch schlecht aus. authors.authorNameWann gibt es nur einen Autor? Das ist imo verwirrender. Das ist natürlich viel besser geworden, jetzt haben wir den Satzstil mysql_ beseitigt und haben bessere Möglichkeiten, auf die Daten zuzugreifen :)
James

1

Nachdem ich einige Jahre mit dem Programmieren gearbeitet habe, bin ich zu dem Schluss gekommen, dass Pluralisierung eine unnötige Komplikation ist. Meiner Meinung nach sollte ein Programmierer gemäß der KISS-Philosophie aus Zeit- und Effizienzgründen die faulste und einfachste Lösung für alle Probleme anstreben. Mit Singular haben Sie in allen Szenarien weniger Arbeitsaufwand.


Diese Antwort fügt dem gesamten Thread nicht wirklich etwas hinzu! Sie können das Problem nicht beantworten, indem Sie beispielsweise eine Tabelle "order" aufrufen! Persönlich benutze ich Französisch Worte , wenn Englisch nicht den Trick - ordre, groupe ... Immer Tisch des Kommentarfeld benutzen , um Ihre Wahl zu erklären! Aber das wirklich Wichtige ist, eine Konvention zu haben und sich daran zu halten !
2.

Wie fügt es nichts hinzu? Ich fügte hinzu, dass Singular meiner Meinung nach weniger Arbeit ist. Wenn Sie eine andere Meinung haben als ich, entwerten Sie bitte meine Meinung nicht. "Befehle" ist nicht das Problem, das Problem sind kompliziertere Pluralisierungen, die keine -s wie "Kategorien" sind, die ich in allen möglichen Kombinationen falsch geschrieben gesehen habe und die unnötige Arbeit verursachen.
ColacX

0

Es ist eine sehr persönliche Sache. Ich benutze seit 30 Jahren die Singularform. Aber ich kann verstehen, warum Menschen Pluralisten mögen. Die Buchautoren sind interessant, da ich denke, dass Buchautoren nicht falsch sind. Ein Buch kann einen oder mehrere Autoren haben. Und Autoren haben möglicherweise ein oder mehrere Bücher geschrieben (z. B. mitgeschrieben). Es hängt auch nur davon ab, wie Sie mit Büchern umgehen, die von mehr als einem Autor geschrieben wurden. Ich stimme anderen Antworten zu. wähle eine und sei konsequent. In Bezug auf reservierte Wörter Fragen. Ich denke, es ist nicht schwer, Workaround-Namen zu finden. user -> app_user, session -> app_session, order -> customer_order


0

Wir betrachten die Dinge aus verschiedenen Perspektiven, und ich denke, die beiden Lager sind gekennzeichnet durch:

Singular ("Benutzer")
Die Person, die eine Korrelation zwischen dem Tabellennamen und der Tatsache erstellt, dass es sich um einen Container handelt, der mehrere Zeilen enthalten kann.

"Benutzercontainer" kann also mehrere Zeilen enthalten.

Plural ("Benutzer")
Die Person, die die Korrelation zwischen dem Tabellennamen und der Tatsache, dass es sich um einen Container handelt, nicht herstellt. Natürlich wissen sie, dass es sich um einen Container handelt, aber der Name enthält ihn nicht.

Beispiel:
Ein "Eierkarton" kann mehrere Eier enthalten. Dies ist jedoch offensichtlich, da sich die Behälterreferenz im Namen befindet und das Potenzial für mehrere Eier besteht. Bei dem singulären Tabellennamen "user" ist die Containerreferenz jedoch nicht im Namen enthalten. zB "user_container" wäre wahrscheinlich akzeptabel für Leute, die mehrere Namen bevorzugen.

Ich denke, das liegt auch daran, dass jahrelanger Pluralismus in den meisten Online-Unterrichtsmaterialien gängige Praxis ist.


Trotzdem denke ich, dass der Singular technisch genauer ist, da wir einen einzelnen Container benennen und Container mehrere (oder einzelne) Zeilen enthalten können.
Es erscheint den Leuten falsch, wenn sie den Tabellennamen mental mit dem Inhalt verknüpfen (mehrere Zeilen benötigen einen Pluralnamen), anstatt den benannten Container mental mit dem Inhalt zu verknüpfen (ein Container ermöglicht mehrere).

Wie immer, obwohl es oft kein Richtig und Falsch gibt, und es geht eher darum, was zum Szenario passt, und es ist wichtig, mit dem, was Sie wählen, im Einklang zu stehen.

Wenn Sie das Projekt ausschließlich durchführen und es keinen wirklichen Grund gibt, in eine der beiden Richtungen zu gehen, tun Sie, was Sie für am besten halten oder nur bevorzugen. Wenden Sie dasselbe in einem Entwicklerteam an und treffen Sie eine einstimmige Entscheidung.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.