2012-10-02 70 views
6

Tôi thừa kế cơ sở dữ liệu SQL Server có bảng có khóa chính có tên RecordID. Định nghĩa bảng và phím nước ngoài được xác định như thế này:Tại sao tạo ràng buộc khóa ngoài tham chiếu khóa chính của cùng một bảng từ trường khóa chính

CREATE TABLE [dbo].[MyTable](
    [RecordId] [int] IDENTITY(1,1) NOT NULL, 
    [FileName] [nvarchar](255) NOT NULL, 
    [Record] [nvarchar](255) NOT NULL, 
    [ErrorDescription] [nvarchar](255) NULL, 
    [ProcessDate] [datetime] NOT NULL, 
CONSTRAINT [PK_MyTable] PRIMARY KEY CLUSTERED 
(
    [RecordId] 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] 

GO 

ALTER TABLE [dbo].[MyTable] WITH CHECK ADD CONSTRAINT [FK_MyTable_MyTable] FOREIGN KEY([RecordId]) 
REFERENCES [dbo].[MyTable] ([RecordId]) 
GO 

ALTER TABLE [dbo].[MyTable] CHECK CONSTRAINT [FK_MyTable_MyTable] 
GO 

tôi có thể hiểu được điều này nếu chìa khóa ngoại tham chiếu từ một lĩnh vực khác nhau trong cùng một bảng trở lại lĩnh vực then chốt primaray mà sẽ cho phép một hệ thống cấp bậc, nhưng trong trường hợp này hai trường trong định nghĩa khóa ngoài chính xác là cùng một trường. Đây có phải chỉ là một sai lầm trong định nghĩa ban đầu của bảng và khóa ngoại? Hoặc là có một lợi thế thực sự bằng cách nào đó để điều này?

Cảm ơn trước về thời gian trả lời của bạn.

+0

Có thể kiểm tra xem có một bảng khác trong cơ sở dữ liệu trông giống như * * nên tham chiếu bảng này nhưng không. –

Trả lời

4

Vì khóa ngoại tự tham chiếu, kiểm tra không bao giờ có thể thất bại. Điều đó làm cho nó, như một ràng buộc, một không-op, do đó, nó là trong mọi nghĩa của từ, không liên quan. Có người rõ ràng đã mắc lỗi trong việc tạo ra ràng buộc.

Tôi nghĩ rằng tôi có thể thiếu thứ gì đó, vì vậy hãy nhanh chóng kiểm tra điều này: http://www.dotnetnuke.com/Resources/Forums/forumid/-1/postid/342163/scope/posts.aspx củng cố sự nghi ngờ của tôi (lỗi người dùng). Kết luận được giáo dục nhất của tôi là một người nào đó ở giai đoạn nào đó nghĩ đến việc tạo ra một ràng buộc bảng tự tham khảo (cột khác), nhưng trong một sự lộn xộn độc ác của sự nhầm lẫn đã tạo ra sự ghê tởm này.

Các vấn đề liên quan