2014-10-16 155 views
0

我是SQL新手,我有一个非常基本的问题。SQL - FK之间的约束

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

这里是什么,我试图做一个例子:

表1中含有的名称和一群人NAME(PK)的性别,性别

表2同伙一组4人到一个房间号码。如何限制第二个表中的FK,以确保只有同一性别的人与某个人相关联,才能确保第二个表中的FK与第一个表中的FK相关联房间?

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

谢谢。

+0

您可以编写一个自定义函数来检查房间的成员性别,然后向房间表添加一个约束来调用该函数。请参阅[此问题](http://stackoverflow.com/questions/2588072/how-do-i-create-a-multiple-table-check-constraint)为例。 – Blorgbeard 2014-10-16 19:10:09

回答

-1

我不会为房间的4名成员分隔列。我会选择一个名称列和一个房间列,然后按房间分组,以获得4个成员,然后检查他们的性别。 如果你想继续你的解决方案,那么你可以添加一个触发器来检查性别是否相同,如果不是插入失败的话。

注意:如果一次只插入一行,该触发器才会起作用。

CREATE TRIGGER Production.tr_ForeignTable_gender
ON [ForeignTable]
AFTER INSERT AS
BEGIN
IF @@ ROWCOUNT = 0 RETURN;
SET NOCOUNT ON; (200),@ Name3 varchar(200),@ Name4 varchar(200),@ Gender1 varchar(10),@ Gender2 varchar(10),@ Gender3 varchar(200),@ Gender2 varchar ),@ Gender3 VARCHAR(10)

选择@名1 = NAME1,@名称2 =名称2,@ NAME3 = NAME3,@ NAME4 = NAME4
从插入的

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

select @ Gender2 = Gender from [PrimaryTable] where Name = @N AME2

选择@ Gender3 =性别 从[PrimaryTable] 其中Name = @ NAME3

选择@ Gender4 =性别 从[PrimaryTable] 其中Name = @ NAME4

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