【发布时间】:2015-01-18 03:08:06
【问题描述】:
考虑以下我在 Microsoft SQL Server 2012 中运行的脚本:
create table PKTestTable1 (
Column1 int not null,
Column2 int not null,
constraint PK_PKTestTable1 primary key (
Column1,
Column2
)
)
create table FKTestTable1 (
Column1 int not null,
Column2 int not null
)
alter table FKTestTable1 add foreign key (Column1, Column2) references PKTestTable1(Column1, Column2)
alter table FKTestTable1 add foreign key (Column1, Column2) references PKTestTable1(Column1, Column2)
以前,如果我要求 SQL Server“找到将 Table1 上的 A、B 和 C 列按顺序指向 Table2 上的 D、E 和 F 列的外键”,我会预计返回的行不超过一行。运行此脚本时,我预计 SQL Server 会显示引用重复的错误,但事实并非如此。相反,使用不同的自动生成名称创建了两个外键。据我所知,这些外键在各方面都完全相同,除了它们的名称。
我意识到我可以通过命名约束来避免这种情况——这不是问题所在。看到允许以完全相同的定义存在多个外键是令人困惑的。我的问题是:为什么 SQL Server 允许这样做?
【问题讨论】:
-
它允许您创建两个具有相同架构的表,或具有相同定义的视图,或具有相同代码的存储过程。没有什么不妥。在要求 SQL Server 执行之前,您应该了解您的数据库。
-
并且您可以创建重复索引。 SQL 只会按照您的指示去做。
标签: sql-server tsql foreign-keys duplicates