引用自身的外键列的效果(或目的)是什么?

Mat*_*ith 7 sql sybase sql-server-2008-r2

在数据库迁移期间,我遇到了以下形式的数据库表约束:

ALTER TABLE [dbo].[myTable]
ADD CONSTRAINT [someName] FOREIGN KEY ([id]) REFERENCES [dbo].[myTable] ([id])
ON DELETE NO ACTION
ON UPDATE NO ACTION
Run Code Online (Sandbox Code Playgroud)

为什么会这样做?这最初是在Sybase数据库上完成的,我们正在转换为SQL Server 2008 R2.

更新:是的,外键约束是引用相同表和相同字段的字段.

我在源Sybase数据库上运行了这个查询,发现定义了42个这些疯狂的键,所以它似乎不是一个错字.

SELECT sr.constrid as [Constraint ID],
       so.name as [Table],
       sc.name as [Column]
  FROM sysreferences sr
       INNER JOIN sysobjects so ON (so.id = sr.tableid)
       INNER JOIN syscolumns sc ON (sc.id = sr.tableid AND sc.colid = sr.fokey1)
 WHERE sr.tableid = sr.reftabid
   AND sr.fokey1 = sr.refkey1
   AND sr.fokey2 = 0
   AND sr.refkey2 = 0
Run Code Online (Sandbox Code Playgroud)

TcK*_*cKs 0

我猜这是数据库模型中的一个错误。

真的很奇怪。我无法想象这个建筑有什么用处。

插入数据的唯一方法是不检查引用完整性。这意味着明确禁用引用或某种批量插入等。