SQL:指向同一列的列上的外键

时间:2014-01-08 11:11:50

标签: sql sql-server foreign-keys

我最近在我们的一个遗留数据库中遇到了一个古怪的场景,而我们的DBA(不是那个创建它的人)不确定为什么会这样做以及它会带来什么好处。我们唯一能想到的是它是错误的。已在表上定义了以下外键约束:

CREATE TABLE [dbo].[SomeTable]
(
    [Id] SMALLINT IDENTITY (1,1) NOT NULL,
    -- other columns

    CONSTRAINT [PK_SomeTable] PRIMARY KEY CLUSTERED ([Id] ASC)
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[SomeTable] WITH CHECK ADD CONSTRAINT [FK_SomeTable_SomeTable]
FOREIGN KEY ([Id]) REFERENCES [dbo].[SomeTable] ([Id])
GO

ALTER TABLE [dbo].[SomeTable] CHECK CONSTRAINT [FK_SomeTable_SomeTable]
GO

任何人都知道或对这实际可能做的事情有任何想法?

2 个答案:

答案 0 :(得分:1)

可以使用引用同一个表的外键来实现层次结构,但当然我们应该在同一个表中使用不同的列。 我认为这张桌子的创造者犯了错误。

答案 1 :(得分:0)

由于外键约束,无法删除行。至少SQL Server不够聪明,无法意识到外键的目标实际上是同一行。尝试编辑主键的值也是如此。

我想这可能是设计上的,以防止行被更改或删除,但更好的解决方案是使用触发器。