SQL使用另一个表限制列值

SQL使用另一个表限制列值,sql,key,Sql,Key,我是SQL新手,我使用的是SQL Server Managmetn Studio V11 我的结构有问题: 例如,如果我有一张桌子水果: 水果ID、名称、家族ID、颜色ID 表系列 家庭ID、姓名 表允许颜色 ID, FamilyID, ColourID 1, 1, 56 2, 1, 88 3, 1, 99 4, 2, 56 5, 2, 57 所以在允许的颜色中我列出了某个家族可以拥有的颜色。 如何限制在水果表中输

我是SQL新手,我使用的是SQL Server Managmetn Studio V11

我的结构有问题:

例如,如果我有一张桌子水果

水果ID、名称、家族ID、颜色ID

系列

家庭ID、姓名

允许颜色

ID, FamilyID, ColourID
1,     1,     56
2,     1,     88
3,     1,     99
4,     2,     56
5,     2,     57
所以在
允许的颜色中
我列出了某个家族可以拥有的颜色。
如何限制在
水果
表中输入的值,以便只为水果提供允许的颜色

为AllowedColor添加唯一约束。(考虑删除列“id”) 您可能也希望将这些列声明为
非NULL
。我把这个留给你

现在可以将这对列用作外键约束的目标

alter table fruit
add constraint another_constraint_name
foreign key (FamilyID, ColorID) 
  references AllowedColors (FamilyID, ColorID);

您还需要AllowedColor.FamilyID到Family.FamilyID的外键。

谢谢您的回复。这对我帮助很大,我没有意识到我可以使用Unqiue约束,如果你删除列“ID”,你可以声明{FamilyID,ColorID}主键,而不是声明它们唯一。其他一切都一样。这种方法是否适合在实践中构建有效值或值组合的“词典”?@AurusHuang:我不知道你的意思。在SQL dbms中,有效值通常存储在表中;“其他表”设置该表的外键引用。这就是你在想的吗?@MikeSherrill'CatRecall'这正是我想要的!非常感谢。
alter table fruit
add constraint another_constraint_name
foreign key (FamilyID, ColorID) 
  references AllowedColors (FamilyID, ColorID);