jnm*_*nm2 5 foreign-key database-design sql-server
我一直用这个名字FK_CurrentTableName_ReferencedTableName。我只是碰到了在那里我有一个表的情况CreatedById,并ModifiedById都指向同一个(用户)表,所以这个命名约定将无法正常工作。
将我所有的参考约束更改为实际上更好FK_CurrentTableName_CurrentColumnName吗?或者我应该保持不变,除非有冲突然后做FK_CurrentTableName_CurrentColumnName_ReferencedTableName或FK_CurrentTableName_ReferencedTableName_CurrentColumnName?
我搜索并阅读了相互矛盾的意见。对于 SQL Server,有标准吗?
不,没有针对此或几乎任何其他场景的标准命名约定。命名约定纯粹是主观的:那你的惯例是有道理的,和你用你的标准一致,均远高于其标准的选择更重要。
也就是说,在这种情况下,我会选择这个选项:
FK_CurrentTable_Created_Users
FK_CurrentTable_Modified_Users
Run Code Online (Sandbox Code Playgroud)
如果您想推断出有关此外键的某些信息,而无需费力地检索实际定义,这将提供您需要的所有信息。如果你只是使用这个:
FK_CurrentTable_Created
Run Code Online (Sandbox Code Playgroud)
然后你不会得到关于另一个表的任何信息。在这种特定情况下,推断应该很容易,但这并不总是正确的。如果你使用这个:
FK_CurrentTable_Users_Created
Run Code Online (Sandbox Code Playgroud)
我只是觉得它的顺序不对。“这张表引用了 x 列上的那个表。” 更直观,恕我直言,说“此表的列 x 引用了该表。” 它甚至可能需要双方的完整引用(当然,users 表可能有多个候选键,尽管 FK 指向候选/自然而不是代理的情况相当罕见):
FK_CurrentTable_Created_Users_UserID
Run Code Online (Sandbox Code Playgroud)
这就是问题所在。您将继续发现矛盾的意见,正是因为根据定义,这个决定必须由意见驱动。并不是每个人都会同意。
| 归档时间: |
|
| 查看次数: |
12782 次 |
| 最近记录: |