我有2個表,這裏我試圖插入一個FK關係。但是,當我嘗試修改表格以創建FK關係時,我遇到了錯誤,請幫助...我在兩個表中都有俱樂部ID,我在下面評論過,但我不確定爲什麼我仍然收到約束錯誤。更改聲明與外鍵衝突,但ID存在於表
什麼導致了約束錯誤?
CREATE TABLE [dbo].[Clubs](
[ClubID] [int] IDENTITY(1,1) NOT NULL, // ClubID is here
[Name] [nvarchar](128) NOT NULL,
[Description] [nvarchar](2047) NULL,
[Created] [datetime] NOT NULL,
[Modified] [datetime] NULL,
CONSTRAINT [PK_Clubs] PRIMARY KEY CLUSTERED
(
[ClubID] 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
CREATE TABLE [dbo].[MemberClubs](
[MemberClubID] [int] IDENTITY(1,1) NOT NULL,
[MemberID] [bigint] NOT NULL,
[ClubID] [int] NOT NULL, //Club ID is here as well
CONSTRAINT [PK_MemberClubs] PRIMARY KEY CLUSTERED
(
[MemberClubID] 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 SET IDENTITY_INSERT [dbo].[MemberClubs] ON
GO INSERT [dbo].[MemberClubs] ([MemberClubID], [MemberID], [ClubID]) VALUES (1, 1, 1)
GO INSERT [dbo].[MemberClubs] ([MemberClubID], [MemberID], [ClubID]) VALUES (2, 2, 1)
GO INSERT [dbo].[MemberClubs] ([MemberClubID], [MemberID], [ClubID]) VALUES (3, 3, 1)
GO INSERT [dbo].[MemberClubs] ([MemberClubID], [MemberID], [ClubID]) VALUES (4, 4, 1)
GO INSERT [dbo].[MemberClubs] ([MemberClubID], [MemberID], [ClubID]) VALUES (5, 5, 1)
GO SET IDENTITY_INSERT [dbo].[MemberClubs] OFF
GO
// *** The error is over here
ALTER TABLE [dbo].[MemberClubs] WITH CHECK ADD CONSTRAINT [FK_MemberClubs_Clubs] FOREIGN KEY([ClubID])
REFERENCES [dbo].[Clubs] ([ClubID])
GO
// $$$ The second FK constraint error is over here
ALTER TABLE [dbo].[MemberClubs] CHECK CONSTRAINT [FK_MemberClubs_Clubs]
GO
ALTER TABLE [dbo].[MemberClubs] WITH CHECK ADD CONSTRAINT [FK_MemberClubs_Members] FOREIGN KEY([MemberID])
REFERENCES [dbo].[Members] ([MemberID])
GO
ALTER TABLE [dbo].[MemberClubs] CHECK CONSTRAINT [FK_MemberClubs_Members]
GO
的錯誤:
消息547,級別16,狀態0,行* * *(上圖)
The ALTER TABLE statement conflicted with the FOREIGN KEY constraint "FK_MemberClubs_Clubs". The conflict occurred in database "newDb", table "dbo.Clubs", column 'ClubID'.
消息4917,級別16,狀態0,行$$$(上圖)
Constraint 'FK_MemberClubs_Clubs' does not exist.
消息4916,級別16,狀態0,$$$線(上圖)
Could not enable or disable the constraint. See previous errors.
這看起來像會員和俱樂部之間的中間表。執行此操作的標準方法是創建MemberID和ClubID的組合鍵,而不是在此表中爲主鍵創建標識列。 –
@SeanLange可以改變設計並影響一些代碼。但是如果它使它更簡單或更清潔,我可以做到這一點。我不確定我是否理解組合鍵如何更好(關聯表),即我正在考慮像C#這樣的組合鍵。除非在Sql中有不同之處 – Crew
問題是您已經擁有主鍵所需的值。它使用了一個簡單的自然鍵,而不是隻編一個幻數。從設計角度來看,這將是首選。 –