我应该在数据库列名中发出外键信号吗?
FKOrder vs. FK_Order vs. Order
答案 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:
给定表:AssignedToUserId
和Workitem
User
有User
和CreatedByUserId
的位置
外键名称为AssignedToUserId
和FK_Workitem_User_CreatedByUser
如果表/列在名称中有下划线,则使用双下划线:
示例2:
给定表:FK_Workitem_AssignedToUser
和work_item
user
有user
和created_by_user_id
的位置
外键名称为assigned_to_user_id
和FK_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
表的外键。我后来不使用任何资本。