我将参与一个大项目,我想知道在您看来哪个是命名SQL表列的最佳实践。
让我们说我们有一个产品表。您更喜欢以下哪种命名?
或
答案 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的表:
这没有意义,对吧?
但是在外键上,外键字段的表名应该为前缀。
答案 15 :(得分:0)
前缀的优点是您想要连接表时 例如,如果您有两个表:
为了能够获得具有匹配类别的每个产品,您必须使用select * from products join categories on category_id=categories.name
,因为这两个表都包含“名称”字段。
但是,如果字段将带有前缀:
您只能select * from products join categories on category_id = category_name
第二种方式的问题是字段名称太长。 为了解决这个问题,我看到了另一种方式:
通过这种方式,您可以同时获得两种方式的好处。 短场和简单连接。