2010-08-19 17 views
18

Ich werde mich an einem großen Projekt beteiligen und ich würde gerne wissen, welches Ihrer Meinung nach die beste Vorgehensweise für die Benennung von SQL-Tabellenspalten ist.Best Practice für die Benennung von SQL-Tabellenspalten

Sagen wir, wir haben eine Produkttabelle. Welche der folgenden Benennungen bevorzugen Sie?

  • id,
  • Name,
  • Beschreibung,
  • Foto,
  • Preis

oder

  • product_id,
  • product_name,
  • PRODUCT_DESCRIPTION,
  • product_photo,
  • PRODUCT_PRICE
+7

Community-Wiki? – RedFilter

+0

@RedFilter, ich verstehe dich nicht Frage. – Psyche

+0

Fragen wie diese, die eine Frage des Geschmacks oder der Vorliebe sind, haben keine echte "richtige" Antwort und sollten deshalb mit der "Community Wiki" Flagge markiert werden. – auujay

Antwort

11

Auf jeden Fall das erste. Zweitens ist eine Verletzung von DRY Prinzip.

+0

Vereinbarte, normalerweise Tabelle wird einen Namen haben, der was zu erklären die Einträge darin sind. In diesem Fall Produkte. – Chris

1

Persönlich finde ich das Produkt_ Präfix redundant und irritierend. Dies ist jedoch letztlich eine Frage der persönlichen Präferenz (oder des Teamkonsenses).

26

Wenn Sie Spaltennamen mit dem Tabellennamen vorfixieren, werden keine Vorteile hinzugefügt und der Code wird nicht aufgefüllt. Die erste Wahl ist besser. Nur die Spalte "ID" kann Vorteile mit dem Präfix haben, da dies wahrscheinlich ein Schlüssel ist, und wahrscheinlich gibt es andere Tabellen mit derselben Spalte.

+1

Angenommen, Sie haben eine Tabelle mit zwei ID-Spalten - woher wissen Sie, welche welche ist? –

+4

+1 für 'table_id': es ist großartig, da es keine Probleme mit Namenskonflikten verursacht, wenn Sie mehrere Tabellen gleichzeitig verwenden, aber normalerweise nicht viel anderswo verwendet wird. –

+0

@OMG Ponys, ich denke, das ist der Grund, warum Russ sagt, dass es in Ordnung ist, der ID-Spalte den Tabellennamen voran zu stellen. –

1

Die erste, ohne eine Frage. Die Benennung der ID-Spalte Product_id könnte in einigen Fällen nützlich sein (obwohl mir im Moment nichts einfällt), aber ansonsten hat es keinen Sinn, den Namen der Tabelle im Namen jeder Spalte zu wiederholen. Und für den Fall, dass Sie die andere Alternative wählen, habe ich _ in Spaltennamen nicht mehr gemocht, also würde ich stattdessen ProductId verwenden.

3

Ich würde mit der ersten Wahl gehen, wiederholen Sie nicht den Tabellennamen im Feld, was passiert, wenn die Tabelle den Namen ändern?

wenn Sie eine Menge Tabelle mit denselben Feldnamen verwenden wollen, spielt es keine Rolle, verwenden Sie Aliase

3

Wenn ich einen Artikel Tisch haben und eine Kunden-Tabelle meine ID wird ProductID und CustomerID sind. Ich finde es einfacher, da ID alles bedeuten kann, besonders wenn Sie versuchen, beide in einer Abfrage zurückzugeben. Aber es ist alles eine Frage der Präferenz.

Aber halten Sie es konsistent ist alles was ich sagen kann.

+0

+1: Für Konsistenz und informative Spaltenbenennungskonventionen. –

+0

+1: Für die große Schrift und fett am Ende! – Perpetualcoder

6

Ich würde in den meisten Fällen denken, die erste wäre in Ordnung, da Sie in der Regel die Tabelle in Ihren Abfragen angeben müssen. Wenn also der Name der Tabelle (oder des Alias) beschreibend ist, wären Dinge wie product.id klarer als product.product_id.

0

Ich würde den Tabellennamen nur für die ID zB hinzufügen. product_ID nur aufgrund der persönlichen Vorlieben und lassen Sie den Rest wie sie auf Ihrem ersten Beispiel sind.

4

Die erste Option ist meine Wahl, weil man bereits weiß, aus welcher Tabelle die Felder stammen. Darüber hinaus verwende ich <Tabellenname> _ < Schlüsselfeld > in anderen Tabellen als Fremdschlüssel Feldname (product_id, zum Beispiel).

0

Ich würde nur die ID (PK) -Spalte mit dem Tabellennamen voranstellen, da Sie konsistente Namen für Spalten haben können, wenn Sie sie als FK in einer anderen Tabelle verwenden. Keine Notwendigkeit, den anderen Spalten voranzukommen.

0

Ich denke, das ist sehr wichtig.

Beim Definieren der eigenen Tabellen-ID sollten Sie nur die ID verwenden. Wenn Sie jedoch ein Fremdschlüsselfeld definieren, sollten Sie den Tabellennamen verwenden.

Eine Tabelle mit einem Namen Tabelle 1 und die filds:

  • Table1Id
  • Table1Name

Dies macht keinen Sinn, nicht wahr?

Bei Fremdschlüsseln sollte dem Feld für den Fremdschlüssel jedoch der Tabellenname vorangestellt sein.

2

Ich stimme denen zu, die sagen, dass der Tabellenname aus allen Spalten mit Ausnahme der ID weggelassen werden sollte.

Wenn eine Spalte ein Fremdschlüssel ist, dann gebe ich ihr den gleichen Namen wie die Spalte, auf die sie verweist. Dies macht die Dinge einfacher und leichter zu merken. Es gibt zwei Ausnahmen von dieser Regel. Wenn mehr als ein Fremdschlüssel auf dieselbe Spalte in derselben Tabelle verweist, benötigen sie eine Art Präfix, das auf ihrer Verwendung basiert, um sie zu unterscheiden. Und wenn ein Fremdschlüssel eine spezielle Verwendung hat, benötigt er möglicherweise einen anderen Namen (beispielsweise ManagerPersonId anstelle von PersonId).

Diese Regel zu Fremdschlüsselnamen ermutigt, der ID-Spalte den Tabellennamen voran zu stellen.

Wenn der Primärschlüssel einer Tabelle ein synthetischer Bezeichner ist, wie eine Identitätsspalte, dann wird es sehr natürlich, sie TableNameId zu nennen, da sie genau das beschreibt, was sie ist.

In allen anderen Fällen ist das Vorsilben von Spaltennamen mit dem Tabellennamen unnötig, redundant und ausführlich.

4

Tabellen

Product 
ProductCategory - prefix with underlying table name, could be other categegories 

Spalten

ProductID,  - prefix with a table name 
CategoryID,  - note that it's not a ProductCategoryID 
Name, 
Description, 
Photo, 
Price 

Keys

PK_Product_ProductID - primary key 
AK_Product_Name  - alternative key (unique column) 
FK_Product_CategoryID - foreign key 

Indizes

IX_Product_Price 
+0

Lassen Sie mich wissen, wenn Sie Namen für andere Assets in Ihrer Datenbank benötigen. Ich bin einer der besten in einem Namenskonvention Bereich :) –

0

Wir sind na ming Spalten mit dem ersten Buchstaben des Tabellennamens, Unterstrich und der Spalte selbst. In der Tabelle blog_msgs verwenden wir zum Beispiel m_id, m_blog, m_title, m_content und in der blogs-Tabelle benennen wir wie b_id, b_title, b_author.

Diesen gute wegen, dass diese Methode ist kurz, und man kann durch die ersten Buchstaben, der Titel des Blogs zwischen dem Blog-Titel und dem Post-Titel unterscheidet b_title ist und der Titel der Blog-Post ist m_title (m für Botschaft).

1

Ich würde mit der Sekunde gehen. Es ist nicht eine Frage von Do not Repeat Yourself (es ist kein Code). Produktfelder sind nur bei Produkten nützlich und sonst nichts.

Siehe ISO/IEC 11179 für weitere Ideen, warum.

1

Niemand hat dies erwähnt, also dachte ich, ich würde mit Dingen wie der "Name" -Spalte kämpfen. Ich finde mich vor generische Spalten wie "Name", weil es so zweideutig ist. Aber ich tue das für die Lesbarkeit, nicht als eine Vorsatzregel.

Verwandte Themen