日期:2014-05-18  浏览次数:20406 次

一个表的两个外键都指向自己
我看到一段SQL,很不理解一个表为什么要建两个都指向自己的外键。。。

CREATE TABLE [dbo].[tblSession](
[iUniqueId] [int] IDENTITY(1,1) NOT NULL,
[iUserUniqueId] [int] NOT NULL,
[nvcSessionId] [nvarchar](100) NOT NULL,
[dtSessionStartTime] [datetime] NOT NULL,
[dtSessionEndTime] [datetime] NULL,
[bSessionInProgress] [bit] NOT NULL,
 CONSTRAINT [PK_tblSession] PRIMARY KEY CLUSTERED 
(
[iUniqueId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
ALTER TABLE [dbo].[tblSession] WITH CHECK ADD CONSTRAINT [FK_tblSession_tblSession] FOREIGN KEY([iUniqueId])
REFERENCES [dbo].[tblSession] ([iUniqueId])
GO
ALTER TABLE [dbo].[tblSession] CHECK CONSTRAINT [FK_tblSession_tblSession]
GO
ALTER TABLE [dbo].[tblSession] WITH CHECK ADD CONSTRAINT [FK_tblSession_tblSession1] FOREIGN KEY([iUniqueId])
REFERENCES [dbo].[tblSession] ([iUniqueId])
GO

------解决方案--------------------
可能是创建表的人当时有点蛋疼。
------解决方案--------------------
两句不都是一样的吗?难道是生成脚本的时候出问题了?
------解决方案--------------------
是应该是搞错了吧
估计是iUserUniqueId-->iUniqueId


iUniqueId--必髯要有唯一性,才能被被引用(唯一索引、约束、主健)
------解决方案--------------------
同意5楼的看法,典型的搞错了,不可能主键自引用的。
------解决方案--------------------
是应该是搞错了吧
估计是iUserUniqueId-->iUniqueId


估计是想 用 iUniqueId,iUserUniqueId 这两个字段来做联合主键。