查看数据库,我遇到了一个表,该表使用其主键作为其自身的外键。
我已经看到一个表可以有一个自身的外键来构建层次结构,但它会使用另一列来引用主键。
由于主键是唯一的,在这种情况下,该行不是只能指向自身吗?这似乎是一个同义反复的链接,因为如果我已经有了该行,那么我已经有了该行。
有什么理由这样做吗?

我确信约束是这样写的(不仅仅是查看图表),因为相同的表和列用于定义的两半。
在处理 DB 项目时,Visual Studio 生成了一个包含以下几行的更改脚本:
GO
SET ANSI_NULLS, ANSI_PADDING --etc.;
SET NUMERIC_ROUNDABORT OFF;
GO
:setvar DatabaseName "Foo"
:setvar DefaultFilePrefix "Foo"
:setvar DefaultDataPath ""
:setvar DefaultLogPath ""
GO
:on error exit
GO
:setvar __IsSqlCmdEnabled "True"
GO
IF N'$(__IsSqlCmdEnabled)' NOT LIKE N'True'
BEGIN
PRINT N'SQLCMD mode must be enabled to successfully execute this script.';
SET NOEXEC ON;
END
GO
USE [$(DatabaseName)];
GO
CREATE NONCLUSTERED INDEX [SomeIndex]
ON [dbo].[SomeTable]([SomeColumn] ASC);
GO
Run Code Online (Sandbox Code Playgroud)
行首的冒号有什么意义?这个 Stackoverflow 问题说冒号用于绑定变量,但是冒号有:on error exit什么作用呢?