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