外键的数据库列命名

die*_*ter 3 database naming-conventions

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

FKOrder vs. FK_Order vs. Order

Nei*_*ell 6

简短的回答是不 - 不要在外键列的列名中加上"FK".你仍然可以发出专栏的意图,这是我如何做到的:

命名外键列

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

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

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

示例2:
对于User具有PK的IdWorkitem和具有"分配给用户ID"和"由用户ID创建"FK的表,我将调用列Workitem.CreatedByUserIdWorkitem.AssignedToUserId.

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

命名外键约束

这是我的:

FK_childtablename_[differentiator]parenttablename
Run Code Online (Sandbox Code Playgroud)

当在相同的两个表(例如CreatedByUserIdAssignedToUserId)之间存在多于一个FK时使用微分器.我经常使用子表的列名.

示例1:
给定表:WorkitemUser Where UserCreatedByUserIdAssignedToUserId 外键名是FK_Workitem_User_CreatedByUserFK_Workitem_AssignedToUser

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

示例2:
给定表:work_itemuser Where usercreated_by_user_idassigned_to_user_id 外键名是FK_work_item__created_by_userFK_work_item__assigned_to_user