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的tableUser
和带有用户Id FK的tableWorkitem
,我将调用列Workitem.UserId
如果同一个表之间有多个FK,我会在列名中说明这一点:
示例2:
对于带有PKId
的表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约束名称,而不是列名:)