关系表命名约定

时间:2011-01-15 23:17:05

标签: database database-design coding-style naming-conventions relational-database

我正在开始一个新项目,并希望从一开始就获得我的表名和列名。例如,我总是在表名中使用复数,但最近学到的单数是正确的。

所以,如果我有一个表“用户”然后我得到的产品只有用户会有, 该表应该命名为“user_product”还是“product”?这是一对多的关系。

而且,如果我(由于某种原因)每个产品的几个产品描述,它会是“user_product_description”或“product_description”还是只是“描述”?当然,正确的外键设置..命名它只描述会有问题,因为我也可以有用户描述或帐户描述或其他..

如果我想要一个只有两列的纯关系表(多对多),那会是什么样子? “user_stuff”或者类似“rel_user_stuff”的内容?如果是第一个,可以区分它,例如“user_product”?

任何帮助都非常受欢迎,如果你们推荐某种命名约定标准,请随时链接。

由于

5 个答案:

答案 0 :(得分:327)

答案 1 :(得分:16)

关于单数与复数没有“正确” - 这主要是品味问题。

这部分取决于你的关注点。如果您将表视为一个单元,它将保留“复数”(因为它包含许多行 - 因此复数名称是合适的)。如果您将表名视为标识表中的行,则您更喜欢“单数”。这意味着您的SQL将被视为从表中的一行开始工作。没关系,虽然这通常是过于简单化了; SQL适用于集合(或多或少)。但是,我们可以单数去寻找这个问题的答案。

  1. 由于您可能需要一个表'用户',另一个'产品',以及第三个用户将用户连接到产品,因此您需要一个表'user_product'。

  2. 由于说明适用于产品,因此您可以使用“product_description”。除非每个用户自己为每个产品命名...

  3. 'user_product'表是(或可能是)具有产品ID和用户ID的表的示例,而不是其他。您以相同的一般方式命名两个属性表:'user_stuff'。像'rel_'这样的装饰前缀并没有真正帮助。例如,您会看到有些人在每个表名前面使用't_'。这不是很多帮助。

答案 2 :(得分:16)

Singular vs. Plural:选择一个并坚持下去。

列不应以前缀/后缀/固定为前缀或以任何方式固定,并引用它是一个列。表格也是如此。不要将表命名为EMPLOYEE_T或TBL_EMPLOYEES,因为第二个用视图替换,事情变得非常混乱。

不要在名称中嵌入类型信息,例如varchar的“vc_firstname”或“flavour_enum”。也不要在列名中嵌入约束,例如“department_fk”或“employee_pk”。

实际上,我能想到的*修复唯一的好处就是你可以使用where_ttbl_orderuser_vw等保留字。当然,在这些例子中,使用复数将解决问题:)

不要将所有键命名为“ID”。引用相同内容的键在所有表中应该具有相同的名称。用户标识列可以在用户表中称为USER_ID,并且所有表都可以引用该用户。重命名的唯一时间是不同用户正在播放不同的角色,例如Message(sender_user_id,receiver_user_id)。这在处理更大的查询时非常有用。

关于CaSe:

thisiswhatithinkofalllowercapscolumnnames.

ALLUPPERCAPSISNOTBETTERBECAUSEITFEELSLIKESOMEONEISSCREAMINGATME.

CamelCaseIsMarginallyBetterButItStillTakesTimeToParse.    

i_recommend_sticking_with_lower_case_and_underscore

通常,最好将“映射表”命名为与其描述的关系相匹配,而不是引用表的名称。用户可以与产品建立任意数量的关系:user_likes_productuser_bought_productuser_wants_to_buy_product

答案 3 :(得分:4)

只要它们被始终如一地使用,它们就不错了 - 但我喜欢单数形式。

除非你想勾勒出多对多的关系,否则我会免除下划线;并使用初始资本,因为它有助于区分ORM中的事物。

但是有很多命名约定,所以如果你想使用下划线就可以了,只要它一致完成。

所以:

User

UserProduct (it is a users products after all)

如果只有一个用户可以拥有任何产品

UserProductDescription

但如果产品由用户共享:

ProductDescription

如果您将下划线保存为多对多关系,则可以执行以下操作:

UserProduct_Stuff

在UserProduct和Stuff之间形成一个M-to-M-从问题中不确定多对多所需的确切性质。

答案 4 :(得分:2)

使用单数形式比复数形式更正确,你听说过哪里?我宁愿说复数形式对命名数据库表更常见......在我看来也更多逻辑。该表通常包含多行;)在概念模型中,虽然实体的名称通常是单数。

关于您的问题,如果“产品”和“ProductDescription”是模型中具有标识(即实体)的概念,我只需将表格称为“产品”和“ProductDescriptions”。对于用于实现多对多关系的表,我最常使用命名约定“SideA2SideB”,例如“Student2Course”。