外键的数据库列命名

时间:2011-04-13 10:24:20

标签: database naming-conventions

我应该在数据库列名中发出外键信号吗?

FKOrder vs. FK_Order vs. Order

5 个答案:

答案 0 :(得分:5)

简短的答案是否定的 - 不要将“FK”放在外键列的列名中。你仍然可以发出专栏的意图,这就是我的方法:

命名外键列

这取决于您对FK目标的命名约定。如果您有Id,那么我在创建FK列时会添加表名。

示例1:
对于具有PK User的表Id和具有用户ID FK的表Workitem,我会调用列Workitem.UserId

如果同一个表之间有多个FK,我会在列名中明确说明:

示例2:
对于包含PK User的表Id和具有“已分配给用户ID”和“由用户ID创建”FK的表Workitem,我会调用列Workitem.CreatedByUserId和{ {1}}。

如果PK的命名约定更像Workitem.AssignedToUserId,那么您可以将其纳入上述示例中,以免最终得到UserId

命名外键约束

这是我的:

UserUserId

当相同的两个表(例如FK_childtablename_[differentiator]parenttablename CreatedByUserId)之间存在多个FK时,使用微分器。我经常使用子表的列名。

示例1:
给定表:AssignedToUserIdWorkitem UserUserCreatedByUserId的位置 外键名称为AssignedToUserIdFK_Workitem_User_CreatedByUser

如果表/列在名称中有下划线,则使用双下划线:

示例2:
给定表:FK_Workitem_AssignedToUserwork_item userusercreated_by_user_id的位置 外键名称为assigned_to_user_idFK_work_item__created_by_user

答案 1 :(得分:1)

通常使用ID(IDORDER,IDPERSON,...)命名外键字段,如果您有一个名为PERSONS的表和另一个CITIES,如果某个人在某个城市,则CITIES具有IDCITY字段(K ),PERSONS有IDPERSON(K)和其他领域IDCITY(FK)。

希望这能回答你的问题。我的意思是,外键在其他表中只是外来的,而不是在他们的表中。但是,对于相同的字段,即使它们在其他表中作为外键,也总是相同的命名是一个好习惯。

答案 2 :(得分:1)

你不应该。

如果某个列稍后成为外键,则必须更改列名,从而破坏所有使用它的脚本。

如果有多个外键,您不知道哪个列属于哪个键,因此您获得的唯一信息是该列是外键,但您已经通过查看键来了解它。

通常我将外键列命名为与主键相同,因此我立即知道键映射的位置。

答案 3 :(得分:0)

我通常使用与持有FK的表中引用列相同的名称。

只有当这可能令人困惑时(或者已存在具有此名称的列,例如id),我才会更明确。在这种情况下,在其余部分之前添加实体类型名称 - 例如ProductId

答案 4 :(得分:-1)

我的风格略有不同:

fk_table_column

例如:fk_user_id,它是User列上id表的外键。我后来不使用任何资本。