约束命名的目的是什么?
命名约束(唯一,主键,外键)的目的是什么?
假设我有一个使用自然键作为主键的表:
CREATE TABLE Order ( LoginName VARCHAR(50) NOT NULL, ProductName VARCHAR(50) NOT NULL, NumberOrdered INT NOT NULL, OrderDateTime DATETIME NOT NULL, PRIMARY KEY(LoginName, OrderDateTime) );
给我的PK带来什么好处(如果有的话)?
例如。 更换:
PRIMARY KEY(LoginName, OrderDateTime)
附:
CONSTRAINT Order_PK PRIMARY KEY(LoginName, OrderDateTime)
对不起,如果我的数据模型不是最好的,我是新来的!
这是一些非常基本的原因。
(1)如果查询(插入,更新,删除)违反约束,SQL将生成一个错误消息,其中将包含约束名称。 如果约束名称清晰且具有描述性,则错误信息将更易于理解; 如果约束名称是一个随机的基于guid的名字,那么它就不那么清楚了。 特别是最终用户,谁(可以,可能)给你打电话,询问“ FK__B__B_COL1__75435199
”是什么意思。
(2)如果将来需要修改一个约束(是的,那么就发生了),如果你不知道它的名字,很难做到。 (ALTER TABLE MyTable drop CONSTRAINT um …)如果您从头开始创build多个数据库实例并使用系统生成的默认名称,则不会有任何两个名称匹配。
(3)如果支持你的代码的人(又名DBA)在周日凌晨3点不得不浪费大量的时间来处理case(1)或case(2),那么他们很可能确定代码来自哪里,并能够做出相应的反应。
为了确定将来的约束(例如,你想在将来放弃它),它应该有一个唯一的名字。 如果你没有为它指定一个名字,数据库引擎可能会为你分配一个奇怪的名字(例如包含随机的东西来确保唯一性)。
它使DBA保持高兴,所以他们让你的模式定义进入生产数据库。
当你的代码随机地违反了一些外键约束时,它肯定会节省debugging的时间,以找出它是哪一个。 命名它们大大简化了debugging插入和更新。
它可以帮助某个人快速了解哪些约束条件正在执行,而无需查看实际的约束条件,因为名称可以提供所有您需要的信息。
所以,我知道它是否是主键,唯一键或默认键,以及涉及的表和可能的列。
通过正确命名所有约束,您可以快速将特定的约束与我们的数据模型相关联。 这给了我们两个真正的好处:
- 我们可以快速识别和修复任何错误。
- 我们可以可靠地修改或删除约束。