SQL主键上1对1自引用的目的是什么?

时间:2014-09-12 18:51:37

标签: sql .net sql-server

我的任务是接管代码库的开发,其中一部分代码库包含一个电子商务网站的数据库。

我注意到的一个非常有趣的模式是这个数据库的作者在许多情况下通过主键(1对1关系)选择自引用表。

例如,以脚本中的一个表为例,提供以下内容:

CREATE TABLE [dbo].[Address](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [CustomerID] [int] NULL,
    [Street] [nvarchar](150) NULL,
    [Address2] [nvarchar](150) NULL,
    [City] [nvarchar](100) NULL,
    [State] [nvarchar](50) NULL,
    [Zip] [nchar](10) NULL,
    .
    .
    .
CONSTRAINT [PK_Address_Main] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 90) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

ALTER TABLE [dbo].[Address]  WITH CHECK ADD  CONSTRAINT [FK_Address_Address] FOREIGN KEY([ID])
REFERENCES [dbo].[Address] ([ID])

现在我不能为我的生活想到有人会这样做的理由。更不用说使它几乎成为数据库中每个表的模式。所以我想我会把它扔出去并询问是否有人看过这个和/或是否有某种情况会支持?它给你买了什么?

我觉得我可能会在主键上删除这些1对1的自引用而没有任何后果。代码库主要基于各种.net版本的实体框架。我只是想确保我不知道在这里和那里通过放弃这些参考来射击自己的一些巧妙的技巧。

感谢任何见解。

0 个答案:

没有答案