0

我有2個表:使用鍵和約束在SQL Server Express

**FamilyHeads** 
HeadID | HeadName  


**FamilyMembers** 
MemberID | MemberName  

現在,我想,如果一個家庭的頭存在,那麼只有家族成員可以在FamilyMembers表插入。爲此,我是否也應該在我的FamilyMembers表中引入HeadID列,並從FamilyHeads表中引用它。或者有什麼解決方案。我知道我必須使用主鍵和外鍵,但不確定實現。請幫助代碼。

+0

您目前沒有主鍵嗎? – gbn 2011-03-23 05:58:38

+0

是的,目前我還沒有分配任何密鑰。 – sqlchild 2011-03-23 06:04:04

回答

1

添加主鍵

ALTER TABLE FamilyHeads WITH CHECK ADD 
    CONSTRAINT PK_FamilyHeads PRIMARY KEY CLUSTERED (HeadID) 
GO 
ALTER TABLE FamilyMembers WITH CHECK ADD 
    CONSTRAINT PK_FamilyMembers PRIMARY KEY CLUSTERED (MemberID) 
GO 

添加列外鍵

--Same datatype, NOT NULL! 
ALTER TABLE FamilyMembers ADD 
    HeadID int NOT NULL 
GO 

添加FK

ALTER TABLE FamilyMembers WITH CHECK ADD 
    CONSTRAINT FK_FamilyMembers_FamilyHeads FOREIGN KEY (HeadID) 
      REFERENCES FamilyHeads (HeadID) 
GO 

你能有重複HeadNames?如果沒有

ALTER TABLE FamilyHeads WITH CHECK ADD 
    CONSTRAINT UQ_FamilyHeads_HeadName UNIQUE (HeadName) 
GO 

如果是,您將如何知道哪些成員添加到哪個頭?

並向HeadID上的FamilyMembers添加非唯一索引

+0

先生,添加主鍵時WITH CHECK&CLUSTERED的功能是什麼?我知道CLUSTERED索引,但什麼是集羣主鍵? – sqlchild 2011-03-23 06:05:55

+0

在互聯網上搜索ALTER TABLE。 – gbn 2011-03-23 06:07:27

+0

是的,先生,我可以有重複HeadNames以及MemberNames,只有GroupCode會爲每個HeadName – sqlchild 2011-03-23 06:08:39