首页 文章

列名不匹配的唯一约束

提问于
浏览
2

我有一张 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 回答

  • 2

    我不确定你的错误来自哪里,但这种接缝可以按你想要的方式工作 .

    create table Model
    (
      Make varchar(25) not null,
      Model varchar(25) not null,
      Year int not null, 
    
      primary key (Make, Model, Year)
    )
    
    create table ModelGroup
    (
      Make varchar(25) not null,
      Model varchar(25) not null,
      StartYear int not null,
      EndYear int not null,
      GroupName varchar(30) not null,
    
      primary key (Make, Model, StartYear),
      unique (Make, Model, EndYear),
      foreign key (Make, Model, StartYear) references Model(Make, Model, Year),
      foreign key (Make, Model, EndYear) references Model(Make, Model, Year)
    )
    

    顺便说一句, ModelGroup 中的主键和唯一约束不是外键工作所必需的 . 但 is 必须在 ModelMake, Model, Year 上拥有主键(或唯一约束) .

  • 0

    我发现了问题:models表中的主键有顺序列:

    Year, Make, Model
    

    我需要引用它们

    Make, Model, Year
    

    我不知道钥匙内的顺序与外键相关;

相关问题