主键列的命名规则是什么?

4

可能是重复的问题:
主键/外键命名规范

数据库表中主键列的命名规范是什么?

例如: PK_Country或CountryId或ID或PrimaryKey等等?


错误的网站,请前往dba.stackexchange.com。我认为此问题已经被提过了。 - Spredzy
6个回答

4

我喜欢 Ruby on Rails 框架的约定:

  • 任何表的主键都是一个名为 id 的自动递增整数列。
  • 外键以外键所在的表名加上 _id 命名。例如:
    • country_id 是与 countries 表中的一条记录对应的外键。

我也倾向于使用这种约定(尽管我使用PHP/Zend框架),但是对于引用相同表的多个外键的情况怎么办呢?例如: order 有两列引用同一张表 user:创建订单的用户和批准订单的用户是谁。 - Luiz Damim
2
在这种情况下,您将不得不打破传统,但我建议使用能够清晰表达意思的名称,例如 creator_user_idapprover_user_id 或者 created_byapproved_by - Teddy
这就是我最终做的事情,但我无法建立一种约定来满足这个“打破常规者”的需求。 :D - Luiz Damim
仅使用id作为主键适用于Active Record或数据映射模式,但在像连接这样的查询中可能会更加困难。当连接具有相同“id”的表时,您必须指出哪个表格属于哪个id字段。 - TomSawyer

3

列的命名应该基于它们所代表的数据元素,而不是基于其所应用的约束条件。主键列应该与其他列的命名方式相同。ISO 11179标准为命名数据元素提供了一些有用的指导方针。


1
如果表名为Test,我会将主键列命名为TestID

1
+1 - 我会称其为TEST_ID,因为并非所有的关系型数据库都很好地支持混合大小写。 - Stephanie Page

0

这基本上取决于数据库设计者。当我设计时,将主键字段命名为:id,外键字段命名为:tablenameId。


0
我总是尝试以PK开头命名主键,以FK开头命名外键。此外,在为外键命名时,我会尝试在外键名称中包含表名和列名:FK_Questions-test-id_Tests-seq-num 是从questions表到tests表的外键,其中questions.test_id = tests.seq_num。我认为这样命名有助于在查看键时更加方便。

0

实际上并没有一个明确定义的标准;相反,您应该制定自己的约定,并确保您定义的每个主键都符合该约定。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接