我是SQL新手,我有一个非常基本的问题。SQL - FK之间的约束
在一个SQL表中有多个FK指向同一个外部表,是否可以创建一个约束来强制FK之间的规则?
这里是什么,我试图做一个例子:
表1中含有的名称和一群人NAME(PK)的性别,性别
表2同伙一组4人到一个房间号码。如何限制第二个表中的FK,以确保只有同一性别的人与某个人相关联,才能确保第二个表中的FK与第一个表中的FK相关联房间?
有没有更好的方法来处理这种情况?
谢谢。
我是SQL新手,我有一个非常基本的问题。SQL - FK之间的约束
在一个SQL表中有多个FK指向同一个外部表,是否可以创建一个约束来强制FK之间的规则?
这里是什么,我试图做一个例子:
表1中含有的名称和一群人NAME(PK)的性别,性别
表2同伙一组4人到一个房间号码。如何限制第二个表中的FK,以确保只有同一性别的人与某个人相关联,才能确保第二个表中的FK与第一个表中的FK相关联房间?
有没有更好的方法来处理这种情况?
谢谢。
我不会为房间的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
您可以编写一个自定义函数来检查房间的成员性别,然后向房间表添加一个约束来调用该函数。请参阅[此问题](http://stackoverflow.com/questions/2588072/how-do-i-create-a-multiple-table-check-constraint)为例。 – Blorgbeard 2014-10-16 19:10:09