SQL - FK之间的约束

时间:2014-10-16 19:01:54

标签: sql sql-server foreign-keys foreign-key-relationship

我是SQL的新手,我有一个非常基本的问题。

在具有指向同一外表的多个FK的SQL表中,是否可以创建在FK之间强加规则的约束?

以下是我要做的一个例子:

表1包含一组人名称和性别NAME(PK),GENDER

表2将一组4人关联到房间号。 ROOM(PK),NAME(FK),NAME(FK),NAME(FK),NAME(FK)

如何限制第二张表中的FK以确保只有同一性别的人与某个房间相关联?

有没有更好的方法来处理这种情况?

谢谢。

1 个答案:

答案 0 :(得分:-1)

我不会为4个房间的成员分别列。我会改为有一个Name列和一个Room列,并按Room分组以获得4个成员,然后检查他们的性别。 如果您想继续使用您的解决方案,那么您可以添加一个触发器来检查性别是否相同,如果插入没有失败。

注意:此触发器仅在一次只插入一行时才有效。

CREATE TRIGGER Production.tr_ForeignTable_gender
ON [ForeignTable]
插入后 AS
BEGIN
IF @@ ROWCOUNT = 0返回;
SET NOCOUNT ON;
声明@ Name1 varchar(200),@ Name2 varchar(200),@ Name4 varchar(200),@ Name4 varchar(200),@ Gender1 varchar(10),@ Gender2 varchar(10),@ Gender3 varchar(10), @ Gender3 varchar(10)

选择@ Name1 = Name1,@ Name2 = Name2,@ Name3 = Name3,@ Name4 = Name4
来自插入

选择@ Gender1 =性别 来自[PrimaryTable] 其中Name = @ Name1

选择@ Gender2 =性别 来自[PrimaryTable] 其中Name = @ Name2

选择@ Gender3 =性别 来自[PrimaryTable] 其中Name = @ Name3

选择@ Gender4 =性别 来自[PrimaryTable] 其中Name = @ Name4

如果@ Gender1!= @ Gender2或@ Gender2!= @ Gender3或@ Gender3!= @ Gender4
   BEGIN
     然后50000,'性别不能相同',0;
   END;
END;
GO