MS SQL Server 中的索引和约束在它们定义的表中是本地的。因此,您可以在多个表中创建相同的索引或约束名称而不会遇到麻烦。
外键约束(每个人都应该知道不是键,而是约束)将出现在 Keys 子文件夹中,并且它们的名称似乎是全局范围的。
有人知道为什么“键”具有全局范围的名称吗?我确实了解键和索引之间的区别。我不明白为什么名称范围会有如此大的差异。在所有情况下,它们对于为其定义的表都是“本地的”。
TIA
MS SQL Server 中的索引和约束在它们定义的表中是本地的。因此,您可以在多个表中创建相同的索引或约束名称而不会遇到麻烦。
外键约束(每个人都应该知道不是键,而是约束)将出现在 Keys 子文件夹中,并且它们的名称似乎是全局范围的。
有人知道为什么“键”具有全局范围的名称吗?我确实了解键和索引之间的区别。我不明白为什么名称范围会有如此大的差异。在所有情况下,它们对于为其定义的表都是“本地的”。
TIA
根据 Peter Gulutzan 和 Trudy Pelzer 的“SQL-99 Complete, real”,约束名称由它们所在的模式限定,并且约束影响的表必须位于相同的模式中。但是约束名称不受该表名的限制。约束名称在它所在的架构中必须是唯一的。
myschema.some_primary_key
myschema.mytable.some_primary_key
至于“为什么”会出现这种情况,我认为它与 SQL-99 中的一种约束有关,称为ASSERTION
. 断言不“属于”单个表,主键、外键和检查约束也是如此。断言声明了一个条件,该条件必须为真才能使任何INSERT/UPDATE/DELETE
成功,并且断言可以引用多个表。用任何表来限定这些约束名称是没有意义的。
不知道有多少个RDBMS品牌实现了SQL断言(其实我一个也不知道),但是他们还不如遵守标准的SQL规则约束名称,所以将来他们可以选择实现断言功能符合标准。