在sql server express中使用键和约束

时间:2011-03-23 05:49:18

标签: sql-server-2005 foreign-keys reference primary-key multiple-tables

我有两张桌子:

**FamilyHeads**
HeadID   | HeadName      


**FamilyMembers**
MemberID  |  MemberName      

现在,我希望如果存在家族头,那么只有家庭成员可以插入FamilyMembers表中。为此,我是否应该在FamilyMembers表中包含HeadID列,并从FamilyHeads表中引用它。或者解决方案是什么。我知道我必须使用主键和外键但不确定实现。请帮忙解释一下代码。

1 个答案:

答案 0 :(得分: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添加一个非唯一索引