Database 外键的数据库列命名

Database 外键的数据库列命名,database,naming-conventions,Database,Naming Conventions,我应该在数据库列名中标记外键吗 FKOrder vs.FK(u Order vs.Order简短的回答是否定的-不要在外键列的列名中加上“FK”。尽管如此,你仍然可以传达专栏的意图,我是这样做的: 命名外键列 这取决于FK目标的命名约定。如果您有Id,那么在创建FK列时,我会在表名前面加上前缀 示例1: 对于带有PKId的tableUser和带有用户Id FK的tableWorkitem,我将调用列Workitem.UserId 如果同一个表之间有多个FK,我会在列名中说明这一点: 示例2: 对

我应该在数据库列名中标记外键吗


FKOrder vs.FK(u Order vs.Order

简短的回答是否定的-不要在外键列的列名中加上“FK”。尽管如此,你仍然可以传达专栏的意图,我是这样做的:

命名外键列 这取决于FK目标的命名约定。如果您有
Id
,那么在创建FK列时,我会在表名前面加上前缀

示例1:
对于带有PK
Id的table
User
和带有用户Id FK的table
Workitem
,我将调用列
Workitem.UserId

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

示例2:
对于带有PK
Id
的表
User
和带有“分配给用户Id”和“由用户Id创建”的表
Workitem
,我将调用列
Workitem.CreatedByUserId
Workitem.AssignedToUserId

如果PKs的命名约定更像是
UserId
,那么您应该将其考虑到上述示例中,以避免以
UserId
结束

命名外键约束 这是我的:

FK_childtablename_[differentiator]parenttablename
当同两个表(例如
CreatedByUserId
AssignedToUserId
)之间存在多个FK时,使用区分符。为此,我通常使用子表的列名

示例1:
给定表格:
Workitem
User
其中,
用户
具有
CreatedByUserId
AssignedToUserId
外键名称是
FK\u工作项\u用户\u创建的数据库用户
FK\u工作项\u分配的用户

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

示例2:
给定表格:
工作项
用户
其中,
用户
具有由用户id创建的
和分配给用户id的


外键名称是由用户创建的
FK\u工作项\u\u\u和分配给用户的
FK\u工作项\u

我通常使用与保存FK的表中引用列相同的名称


只有当这可能令人困惑时(或者已经存在同名的列,比如
id
),我才会更加明确。在这种情况下,如果您有一个名为PERSONS和other CITIES的表,如果一个人在某个城市,CITIES有一个IDCITY字段(K),PERSONS有一个IDPERSON(K),other字段IDCITY(FK),那么在其余字段之前添加实体类型名称通常是用ID(IDORDER,IDPERSON,…)来命名外键字段


希望这能回答你的问题。我的意思是,外键只有在其他表中时才是外键,但不在他们的表中。但最好将相同的字段命名为外键,即使它们位于其他表中。

我的风格略有不同:

fk_table_column
例如:
fk\u user\u id
id
列上
user
表的外键。后面我不使用任何大写字母。

你不应该这样做

如果某个列以后成为外键,则必须更改列名,从而中断使用它的所有脚本

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

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

您显示的是FK约束名称,而不是列名:)