Как избежать циклической ссылки в проекте моей базы данных?

Я разработал базу данных для программы управления транспортом. И одна часть вроде бы в порядке, но я не знаю, как сохранить комбинацию из Package, Price и Version в Project, чтобы избежать циклической ссылки.

Просто краткое объяснение базы данных: у пакета может быть от одной до многих цен и от одной до многих версий. Таким образом, цены не зависят от версии. Например. если у вас есть 2 версии, они имеют одинаковую цену. Версия может иметь от одной до многих единиц оборудования, а также оборудование может принадлежать многим версиям. Пользователь фильтрует пакет и выбирает пакет, после чего выбирает версию и цену и сохраняет их в Project_Has_Packages. Так же, как вы видите на картинке. Изображение проекта базы данных

Мой подход заключался в том, что имя пакета исходит только из таблицы пакетов, а имя версии и имя цены — из конкретных таблиц. В таблице цен и таблице версий мне нужно имя пакета, чтобы сделать записи уникальными, потому что это могут быть «Пакет1», «Версия1» и «Версия2», а также «Пакет2» с «Версия1» и «Версия2». ». Версии отличаются из-за различного оборудования, которое принадлежит Версии. Если я сделаю VersionName уникальным («ver1 Pack1»), то база данных больше не будет нормализована. Есть ли возможность избежать циклической ссылки и как я могу изменить дизайн, чтобы избежать этого? Целый день думаю об этом и больше не вижу леса за деревьями.


person StefanS    schedule 29.06.2016    source источник
comment
тл; ДР; к сожалению, современная жизнь дала мне внимание комара   -  person Strawberry    schedule 29.06.2016


Ответы (1)


Основная проблема с вашим дизайном таблицы заключается в том, что вы используете реальные данные (строки) для ключей. Это кусает вас за зад сейчас и будет продолжать это делать.

Попробуйте добавить идентификатор int с автоинкрементом в качестве первичного ключа для каждой таблицы и соответствующие внешние ключи в таблицах chiöd.

Я полагаю, что «проблема» с круглыми клавишами исчезла после этого?!

person Mattias Åslund    schedule 29.06.2016
comment
Ты прав! Я этого не видел. VersionName и PricingName не являются уникальными выражениями, в отличие от PackageName. Я просто добавил в качестве ключа VersionID и PriceID, и круговая ссылка также решена, и PackageName я использую как неидентифицирующий внешний ключ. PackageName остается строкой, потому что я хочу, чтобы выражение было уникальным. Спасибо за вашу помощь! - person StefanS; 29.06.2016