我刚刚开始使用外键第一次使用外键,我想知道是否有一个标准的命名方案可用于它们?
鉴于这些表格:
task (id, userid, title) note (id, taskid, userid, note); user (id, name)
任务具有Notes,任务由用户拥有,用户拥有Notes.
在这种情况下如何命名三个外键?或者,它甚至是否重要?
更新:这个问题是关于外键名称,而不是字段名称!
SQL Server中的标准约定是:
FK_ForeignKeyTable_PrimaryKeyTable
因此,例如,笔记和任务之间的关键是:
FK_note_task
任务和用户之间的关键是:
FK_task_user
这使您可以"一目了然"查看密钥中涉及哪些表,因此可以轻松查看特定的(指定的第一个)依赖于哪些表(第二个名称).在这种情况下,完整的密钥集将是:
FK_task_user FK_note_task FK_note_user
因此,您可以看到任务取决于用户,而笔记取决于任务和用户.
我使用两个下划线字符作为分隔符即
fk__ForeignKeyTable__PrimaryKeyTable
这是因为表名偶尔会包含下划线字符.这遵循约束的命名约定,因为数据元素的名称通常包含下划线字符,例如
CREATE TABLE NaturalPersons ( ... person_death_date DATETIME, person_death_reason VARCHAR(30) CONSTRAINT person_death_reason__not_zero_length CHECK (DATALENGTH(person_death_reason) > 0), CONSTRAINT person_death_date__person_death_reason__interaction CHECK ((person_death_date IS NULL AND person_death_reason IS NULL) OR (person_death_date IS NOT NULL AND person_death_reason IS NOT NULL)) ...
怎么样FK_TABLENAME_COLUMNNAME
?
ķ EEP 我牛逼小号 imple 小号 tupid当过可能的.
我通常只留下我的PK命名id,然后在其他表中命名FK时连接我的表名和键列名.我从不打扰骆驼套管,因为有些数据库会丢弃区分大小写,并且无论如何都只返回所有大写或小写的名称.在任何情况下,这是我的表格版本的样子:
task (id, userid, title); note (id, taskid, userid, note); user (id, name);
请注意,我还以单数形式命名我的表,因为一行代表我持久存在的对象之一.其中许多约定都是个人偏好.我建议选择一个约会并且总是使用它比接受别人的约定更重要.
Microsoft关于SQL Server的说明:
FOREIGN KEY约束不必仅链接到另一个表中的PRIMARY KEY约束; 它也可以定义为引用另一个表中UNIQUE约束的列.
所以,我将使用描述依赖性的术语而不是传统的主要/外国关系术语.
当通过依赖(子)表中类似命名的列引用独立(父)表的PRIMARY KEY时,我省略了列名:
FK_ChildTable_ParentTable
引用其他列时,或者两个表之间的列名称不同,或者只是显式:
FK_ChildTable_childColumn_ParentTable_parentColumn