命名SQL表列的最佳实践

时间:2010-08-19 17:57:56

标签: sql

我将参与一个大项目,我想知道在您看来哪个是命名SQL表列的最佳实践。

让我们说我们有一个产品表。您更喜欢以下哪种命名?

  • ID
  • 名,
  • 描述
  • 照片,

  • PRODUCT_ID,
  • PRODUCT_NAME,
  • PRODUCT_DESCRIPTION,
  • product_photo,
  • PRODUCT_PRICE

16 个答案:

答案 0 :(得分:27)

使用表名前缀列名不会增加任何好处并使代码混乱。第一选择更好。只有列“ID”可能会带来前缀的好处,因为这可能是一个键,并且可能还有其他表具有相同的列。

答案 1 :(得分:11)

绝对是第一个。第二是违反DRY原则。

答案 2 :(得分:6)

我认为在大多数情况下,第一种情况会很好,因为您通常需要在查询中指定表格。因此,如果表格(或别名)的名称具有描述性,则product.id之类的内容将比product.product_id更清晰。

答案 3 :(得分:4)

第一个选项是我的选择,因为我们已经知道字段来自哪个表。另外,我将使用< table name> _< key field>在其他表中作为外键字段名称(例如product_id)。

答案 4 :(得分:4)

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

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

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

索引

IX_Product_Price

答案 5 :(得分:3)

我会选择第一个选项,不要在字段中重复表名,如果表更改名称会发生​​什么?

如果您要使用大量具有相同字段名称的表,则无关紧要,请使用别名

答案 6 :(得分:3)

如果我有产品表和客户表,我的ID分别成为ProductID和CustomerID。我发现它更简单,因为ID可能意味着什么,特别是如果你试图在查询中返回两者。但这只是一个偏好问题。

但我能说的就是保持一致。

答案 7 :(得分:2)

我同意那些说除了ID之外的所有列都应该省略表名的人。

如果列是外键,那么我想给它提供与它引用的列相同的名称。这往往会使事情变得更简单,更容易记住。此规则有两个例外。如果多个外键引用同一个表中的同一列,那么它们将根据其用途需要某种前缀来区分它们。如果外键具有专门用途,那么它可能需要另一个名称(例如ManagerPersonId而不是PersonId)。

关于外键名称的这条规则鼓励在ID列前加上表名。

此外,如果表的主键是合成标识符(如标识列),则将其命名为TableNameId会非常自然,因为它确切地描述了它是什么。

在所有其他情况下,使用表名称为列名添加前缀是不必要的,冗余的和冗长的。

答案 8 :(得分:2)

没有人提到过这个,所以我想我会这么做 - 我会像“名字”专栏那样挣扎。我发现自己为“name”之类的通用列加前缀,因为它太含糊了。但我这样做是为了提高可读性,而不是作为一揽子前缀规则。

答案 9 :(得分:1)

就个人而言,我发现product_前缀多余且令人恼火。然而,这最终是个人偏好(或团队共识)的问题。

答案 10 :(得分:1)

第一个,没有问题。在某些情况下命名id列Product_id可能很有用(虽然我现在想不到任何内容),但是否则在每列的名称中重复表的名称绝对没有意义。 如果您选择其他替代方案,我会逐渐不喜欢列名中的_,所以我会改用ProductId。

答案 11 :(得分:1)

我会选择第二个。这不是不要重复自己的问题(这不是代码)。产品字段仅适用于产品,而不适用于其他产品。

请参阅ISO / IEC 11179以获取更多想法。

答案 12 :(得分:0)

我只为ID添加表名,例如。 product_ID仅仅由于个人偏好而在第一个例子中保留其余部分。

答案 13 :(得分:0)

我只会在ID(PK)列前加上表名,因为在将列用作另一个表中的FK时,可以为列提供一致的名称。无需为其他列添加前缀。

答案 14 :(得分:0)

我认为这非常重要。

在定义自己的表ID时,您应该只使用ID,但是在定义外键字段时,您应该使用表名。

名为Table1和filds的表:

  • Table1Id
  • Table1Name

这没有意义,对吧?

但是在外键上,外键字段的表名应该为前缀。

答案 15 :(得分:0)

前缀的优点是您想要连接表时 例如,如果您有两个表:

  • 产品
    • ID
    • 名称
    • CATEGORY_ID
  • 类别
    • ID
    • 名称

为了能够获得具有匹配类别的每个产品,您必须使用select * from products join categories on category_id=categories.name,因为这两个表都包含“名称”字段。

但是,如果字段将带有前缀:

  • 产品
    • PRODUCT_ID
    • PRODUCT_NAME
    • product_category_id
  • 类别
    • CATEGORY_ID
    • CATEGORY_NAME

您只能select * from products join categories on category_id = category_name

第二种方式的问题是字段名称太长。 为了解决这个问题,我看到了另一种方式:

  • 产品
    • P_ID
    • p_name
    • p_category_id
  • 类别
    • C_ID
    • c_name

通过这种方式,您可以同时获得两种方式的好处。 短场和简单连接。