Sql 具有自身外键的列

Sql 具有自身外键的列,sql,sql-server,foreign-keys,Sql,Sql Server,Foreign Keys,我正在使用一个现有的大型数据库,发现了一些奇怪的东西。其中有一个主键和一个外键,外键似乎引用了它自己。有人能想到为什么会这样设置吗?我想删除所有这些,但不想因为我不理解而破坏任何东西 ALTER TABLE [career].[AssignmentRange] ADD CONSTRAINT [PK_AssignmentRange] PRIMARY KEY CLUSTERED ( [AssignmentRangeID] ASC )WITH (PAD_INDEX = OFF, ST

我正在使用一个现有的大型数据库,发现了一些奇怪的东西。其中有一个主键和一个外键,外键似乎引用了它自己。有人能想到为什么会这样设置吗?我想删除所有这些,但不想因为我不理解而破坏任何东西

ALTER TABLE [career].[AssignmentRange] ADD  CONSTRAINT [PK_AssignmentRange] 
PRIMARY KEY CLUSTERED 
(
     [AssignmentRangeID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
GO

ALTER TABLE [career].[AssignmentRange]  WITH CHECK ADD  CONSTRAINT 
[FK_AssignmentRange_AssignmentRange] FOREIGN KEY([AssignmentRangeID])
REFERENCES [career].[AssignmentRange] ([AssignmentRangeID])
GO

从下面的评论可以看出,它没有任何用途

该指令的唯一实际用途是避免一些恶作剧,如从存储过程中截断,或类似的事情,而不管是谁做的,都不知道可以使用权限来完成


要么是这样,要么是作者在徒劳地测试。

如果你不理解它,就不要碰它!除非您希望防止插入到表中,否则没有理由这样做。是的,在某些情况下,自引用外键是有意义的。我开始用自指针编写关于复合模式的详细说明,但当我发现引用键实际上指向同一字段时,我停止了。这确实很奇怪。@jarlh自引用外键引用的是同一个表,而不是同一个字段。你能解释一下引用同一个字段的意义吗?你读过代码或注释了吗?它不只是同一个表,而是同一个字段。它是一个主键,同时也是它自身的外键。这将如何阻止DDL指令?我尝试了一个Insert,它像往常一样工作。尝试使用一个truncate,看看它是否删除了任何内容。理论上它不应该让你截断,但你可以从中删除,这从管理的角度来看是有意义的。>>>理论上它不应该让你截断,但你可以从中删除。我同意这一点:它没有任何用途