我有一张 table 列出了所有不同品牌/型号的汽车:
Make, Model, Year
每排都是独一无二的,比如“Chevrolet Camaro 1969”
然后我有一个表格列出了“模型组”,这些车经常被组合在一起,就像1967-1969 Camaros一样 . 所以:
Make, Model, StartYear, EndYear, GroupName
我为“Make-Model-StartYear”和“Make-Model-EndYear”添加了一个Unique限制 .
我想添加一个将开始年份映射到Models表的外键,基本上是为了强制执行:
Chevrolet, Camaro, 1967, 1969, FirstGenerationCamaro
-> Chevrolet, Camaro, 1967 should exist in the Model table
-> Chevrolet, Camaro, 1969 should exist in the Model table
当我尝试这样做时(在SQL Management Studio中)我创建了一个外键映射:
Group.Make -> Model.Make, Group.Model -> Model.Model, Group.StartYear -> Model.StartYear
Group.Make -> Model.Make, Group.Model -> Model.Model, Group.EndYear -> Model.EndYear
在英语中,“1967-1969雪佛兰Camaro”的团体行应该强制执行“1967年雪佛兰Camaro”和“1969年雪佛兰Camaro”的车型入口 .
我遇到的问题是错误“列与主键或现有UNIQUE约束不匹配” . 但我确实对“Make-Model-StartYear”和“Make-Model-EndYear”有不明确的限制 .
也许我会以错误的方式解决这个问题,但我如何确保该组的开始年份和结束年度实际上都有模型条目?
谢谢,戴夫
PS:SQL2008 R2
2 回答
我不确定你的错误来自哪里,但这种接缝可以按你想要的方式工作 .
顺便说一句,
ModelGroup
中的主键和唯一约束不是外键工作所必需的 . 但 is 必须在Model
的Make, Model, Year
上拥有主键(或唯一约束) .我发现了问题:models表中的主键有顺序列:
我需要引用它们
我不知道钥匙内的顺序与外键相关;