我有兩張表:員工(員工id,推薦人id,店號,關聯店號)員工為主鍵,店(店號,地址)店號為主鍵我有兩個問題:1:根據實際情況,推薦人可以沒有,但是如果有的話必須是某一個員工id,我再sqlserver中建立員工表自身的外鍵不行,報錯,ALTER TABLE 語句與 COLUMN FOREIGN KEY SAME TABLE 約束 'FK_員工_員工' 衝突。該衝突發生於資料庫 '員工籌薪計算',表 '員工', column '員工id。難道表自身不能建立外鍵嗎?2:員工中的店號欄位,和關聯店號欄位都是店表的外鍵,引用店表的店號,但是實際操作中我只能建立一個外鍵,第二個就報錯,為什嗎?ALTER TABLE 語句與 COLUMN FOREIGN KEY 約束 'FK_員工_店2' 衝突。該衝突發生於資料庫 '員工籌薪計算',表 '店', column '店號'。謝謝大家!!
問題補充:
謝謝你的回答,我要補充問題:對於第二個問題: 如:員工表中的一條記錄("00005","00001","B-1","B-2")員工id為"00005",他的推薦人為"00001",他的店號為"B-1",而與他關聯(某種關係)的店號為"B-2",實際情況中確實是這樣呀,他自己的店,和關聯的店必須是店表裡的主鍵,或者為空白,這不正是外鍵的性質嗎?其中店號與關聯店號不存在不一致的問題,因為實際情況中就是不相同的。在說第一個問題,例子還是上面的記錄:("00005","00001","B-1","B-2"),他的推薦人確實必學是員工表中的主鍵的某一項,如果表自身不能建立外鍵的話,請問這個問題我該如何解決?在資料變更時加一個觸發器,去檢查輸入的推薦人是否為員工表的id欄位的某一項?
你的要求是完全可以實現的,可能在建立時方法或者文法有點小問題,請確認下。
如下是我在SQL Server 2005安照你的要求建立資料表時用到的文法:
---------------------------------------------------------------
/*建立商店*/
CREATE TABLE [dbo].[Store](
[Id] [char](10) NOT NULL, --編號
[Address] [nvarchar](100) NULL, --地址
CONSTRAINT [PK_Store] PRIMARY KEY CLUSTERED
(
[Id] ASC --建立主鍵
)
) ON [PRIMARY]
GO
/*建立員工*/
CREATE TABLE [dbo].[Employee](
[Id] [char](10) NOT NULL, --編號
[RecId] [char](10) NULL, --推薦人編號
[Store] [char](10) NULL, --商店編號
[RelStore] [char](10) NULL,--關聯商店編號
CONSTRAINT [PK_Employee] PRIMARY KEY CLUSTERED
(
[Id] ASC --建立主鍵
)
) ON [PRIMARY]
GO
/*推薦ID和員工ID建立外鍵約束*/
ALTER TABLE [dbo].[Employee] WITH CHECK ADD CONSTRAINT [FK_Employee_Employee] FOREIGN KEY([RecId])
REFERENCES [dbo].[Employee] ([Id])
GO
ALTER TABLE [dbo].[Employee] CHECK CONSTRAINT [FK_Employee_Employee]
GO
/*員工商店ID和商店ID建立外鍵約束*/
ALTER TABLE [dbo].[Employee] WITH CHECK ADD CONSTRAINT [FK_Employee_Store] FOREIGN KEY([Store])
REFERENCES [dbo].[Store] ([Id])
GO
ALTER TABLE [dbo].[Employee] CHECK CONSTRAINT [FK_Employee_Store]
GO
/*員工關聯店和商店ID建立外鍵約束*/
ALTER TABLE [dbo].[Employee] WITH CHECK ADD CONSTRAINT [FK_Employee_Store1] FOREIGN KEY([RelStore])
REFERENCES [dbo].[Store] ([Id])
GO
ALTER TABLE [dbo].[Employee] CHECK CONSTRAINT [FK_Employee_Store1]
GO
---------------------------------------------------------------
通過這段SQl 指令碼是可以正常建立你所要求的資料表