虽然它可能看起来像基于意见的主要问题,但事实并非如此。
我想知道在SQL中创建约束的每种可能约定的优缺点是什么。由于我使用的是SQL Server,因此我将展示三个创建主键约束的示例,我很喜欢这些约束:
CREATE TABLE Persons (Id int NOT NULL PRIMARY KEY);
CREATE TABLE Persons (Id int NOT NULL, CONSTRAINT PK_Persons_Id PRIMARY KEY(Id));
CREATE TABLE Persons (Id int NOT NULL); ALTER TABLE Persons ADD CONSTRAINT PK_Persons_Id PRIMARY KEY (Id);
这是我迄今为止发现的利弊。也许更有经验的开发人员可以指出其他因素,这些因素有助于在开发和生产环境中创建主键和其他约束时做出最佳决策。 E.g:
我相信我们可以分享我们关于何时一种语法比其他语法具有实际好处的知识。
答案 0 :(得分:3)
从操作的角度来看:为每个约束赋予其自己的唯一名称,以便稍后通过其名称引用它来更改或删除约束。
此外,我更喜欢和普通索引加上对唯一索引的命名唯一约束,因此我可以在以后删除索引而不会丢失索引,当DBMS支持时。实际上我只在Oracle上看过这个:你可以用普通(非唯一)索引支持一个唯一约束。删除约束时,索引保持不变。这对于稳定的执行计划非常重要("计划稳定性")。不幸的是,看起来SQL Server和PostgreSQL在当前版本中都不支持此功能。
使用单独命名的约束,它也更容易区分数据库模式:您只需枚举按名称排序到平面文件中的所有表名,列名,索引名和约束名。然后,您可以轻松地将其与参考文件进行比较,并查找意外差异。当你没有稳定的名字并且必须比较约束的语义时,这就困难得多。