У меня есть таблица, в которой перечислены все марки/модели автомобилей:
Make, Model, Year
Каждый ряд уникален, как "Шевроле Камаро 1969"
Затем у меня есть таблица, в которой перечислены «группы моделей», автомобили, которые часто группируются вместе, например Camaros 1967–1969 годов. Так:
Make, Model, StartYear, EndYear, GroupName
Я добавил уникальное ограничение для «Make-Model-StartYear» и «Make-Model-EndYear».
Я хотел добавить внешний ключ, отображающий начальный год назад в таблицу моделей, в основном для обеспечения этого:
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
В английском языке групповая строка, в которой говорится «Chevrolet Camaro 1967-1969», должна указывать на то, что есть запись модели как для «Chevrolet Camaro 1967», так и для «Chevrolet Camaro 1969».
Проблема, с которой я сталкиваюсь, заключается в ошибке «Столбцы не соответствуют первичному ключу или существующему ограничению UNIQUE». Но у меня действительно есть уникальные ограничения для «Make-Model-StartYear» и «Make-Model-EndYear».
Возможно, я делаю это неправильно, но как мне убедиться, что запись модели действительно существует как для начального, так и для конечного года группы?
Спасибо, Дэйв
PS: SQL2008 R2
Model.StartYear
иModel.EndYear
в ваших сопоставлениях внешних ключей, то есть, не должны ли они оба бытьModel.Year
(на случай, если вы озадачены вопросом). - person Andriy M   schedule 16.03.2012( Chevrolet, Camaro, 1968, 1970, OopsOverlappingCamaro)
- person onedaywhen   schedule 16.03.2012