我是SQL的新手,我有一个非常基本的问题。
在具有指向同一外表的多个FK的SQL表中,是否可以创建在FK之间强加规则的约束?
以下是我要做的一个例子:
表1包含一组人名称和性别NAME(PK),GENDER
表2将一组4人关联到房间号。 ROOM(PK),NAME(FK),NAME(FK),NAME(FK),NAME(FK)
如何限制第二张表中的FK以确保只有同一性别的人与某个房间相关联?
有没有更好的方法来处理这种情况?
谢谢。
答案 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