【发布时间】:2012-04-01 15:46:46
【问题描述】:
我有一张表格,列出了所有不同品牌/型号的汽车:
Make, Model, Year
每一行都是独一无二的,例如“Chevrolet Camaro 1969”
然后,我有一张表格,其中列出了“车型组”,这些车型通常组合在一起,例如 1967-1969 年的 Camaros。所以:
Make, Model, StartYear, EndYear, GroupName
我为“Make-Model-StartYear”和“Make-Model-EndYear”添加了唯一约束。
我想添加一个将开始年份映射回 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 Chevrolet Camaro”的组行应该强制规定“1967 Chevrolet Camaro”和“1969 Chevrolet Camaro”都有一个模型条目。
我遇到的问题是“列与主键或现有的唯一约束不匹配”错误。但我确实对“Make-Model-StartYear”和“Make-Model-EndYear”有独特的限制。
也许我的做法是错误的,但我如何确保组的开始年份和结束年份实际上都有一个模型条目?
谢谢, 戴夫
PS:SQL2008 R2
【问题讨论】:
-
右边不应该是Model.Year吗?
-
我猜 Griffin 是在询问您的外键映射中的
Model.StartYear和Model.EndYear条目,即 它们 是否不应该都是Model.Year(如果您对这个问题感到困惑)。 -
请注意,您缺少序列化的密钥,例如
( Chevrolet, Camaro, 1968, 1970, OopsOverlappingCamaro)
标签: sql sql-server-2008 foreign-keys unique-constraint