【问题标题】:Keys in SQL Server are Global - Why?SQL Server 中的键是全局的 - 为什么?
【发布时间】:2009-03-03 05:22:40
【问题描述】:

MS SQL Server 中的索引和约束在它们被定义的表中是本地的。因此您可以在多个表中创建相同的索引或约束名称而不会遇到麻烦。

外键约束(众所周知,它不是键,而是约束)将出现在 Keys 子文件夹中,并且它们的名称似乎是全局范围的。

有人知道为什么“键”具有全局范围的名称吗?我确实了解键和索引之间的区别。我不明白为什么名称范围会有如此大的差异。在所有情况下,它们对于为其定义的表都是“本地的”。

TIA

【问题讨论】:

    标签: sql-server key naming


    【解决方案1】:

    根据 Peter Gulutzan 和 Trudy Pelzer 的“SQL-99 Complete,Really”,约束名称由它们所在的 schema 限定,并且约束影响的表必须位于相同的架构。但是约束名称不受该表名的限制。约束名称在它所在的架构中必须是唯一的。

    • 是:myschema.some_primary_key
    • 否:myschema.mytable.some_primary_key

    至于“为什么”会出现这种情况,我假设它与 SQL-99 中称为ASSERTION 的一种约束有关。断言不“属于”单个表,主键、外键和检查约束也是如此。断言声明了一个条件,该条件必须为真,任何INSERT/UPDATE/DELETE 才能成功,并且断言可以引用多个表。用任何表来限定这些约束名称是没有意义的。

    不知道有多少 RDBMS 品牌实现了 SQL 断言(其实我一个也不知道),但它们还不如符合标准 SQL 规则的约束名称,所以将来他们可以选择按照标准实现断言功能。

    【讨论】:

    • 谢谢比尔...当我测试重复的约束名称时,我似乎被“刷新失败”问题所困扰... UI 似乎接受了它,但底层数据库没有吨。所以我最初的观察实际上是不正确的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-22
    • 2021-11-19
    • 2013-02-07
    • 2014-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多