Я пытаюсь правильно использовать внешние ключи для обеспечения целостности данных. Я на самом деле не парень базы данных, поэтому мне интересно, есть ли какой-то общий принцип дизайна, о котором я не знаю. Вот пример того, что я пытаюсь сделать:Дизайн базы данных с внешними ключами Вопрос
Скажите, что вы хотите создать базу данных транспортных средств с типом (автомобиль, грузовик и т. Д.), Марка и модель. Пользователь должен ввести, по крайней мере, тип, но Make и Model являются необязательными (если модель задана, тогда требуется Make). Моя первая идея состоит в том, чтобы создать базу данных как таковой:
Type:
-id (PK)
-description
Make:
-id (PK)
-type_id (FK references Type:id)
-description
Model:
-id (PK)
-make_id (FK references Make:id)
-description
Vechicle:
-id (PK)
-type_id (FK references Type:id)
-make_id (FK references Make:id)
-model_id (FK references Model:id)
Как бы вы установили, что ФКС для автомобиля, чтобы убедиться, что тип, марка, модель и все совпасть? Например, как бы вы предотвратили наличие транспортного средства (Тип: Motorcyle, Make: Ford, Model: Civic)? Каждый из них будет действительным FK, но они не поддерживают отношения, показанные через FK других таблиц.
Кроме того, поскольку модель не требуется, я не могу просто сохранить model_id FK и работать с ней обратно.
Я вообще не привязан к дизайну базы данных, поэтому я открыт для возможности изменить способ настройки таблиц. Есть идеи?
P.S. - Я использую mysql, если кому-то это интересно, но это скорее общий вопрос о базах данных.
Edit (Разъяснения):
-type_id и make_id необходимы в таблице транспортного средства, если нет какой-то способ, чтобы понять те, в том случае, model_id равно нулю;
- необходимо поддерживать связи между типами, make_id и model_id.
Вам не нужны столбцы make_id и type_id в таблице вашего автомобиля. – Wacek