Допустим, у вас есть две сущности ... машины и спойлеры.Сложность проектирования базы данных с двунаправленной опциональной связью 1: 1
Автомобиль может не иметь спойлера или максимум одного спойлера.
Спойлер может быть установлен на полке или установлен на одном автомобиле.
Способ, которым система будет разработана, детали спойлера будут сохранены первыми и могут или не могут быть связаны с существующим автомобилем в течение его срока службы.
Каков наилучший способ определить взаимосвязь между этими двумя таблицами?
Моя первая мысль была создать внешние ключи в каждой таблице, ссылающихся на первичную обмотку другой таблицы:
CARS CarId CarDesc SpoilerId
SPOILERS SpoilerId SpoilerDesc CarId
Но я чувствую, что я буду работать в ограничениях целостности когда я пытаюсь удалить.
Моя вторая мысль была просто внешний ключ для спойлеры в таблице АВТОМОБИЛЕЙ, и если я когда-нибудь понадобится, чтобы получить все спойлеры на полке, я могу просто запустить что-то похожее на SELECT * FROM SPOILERS WHERE SPOILER.SPOILDERID NOT IN (SELECT SPOILERID FROM CARS)
Но разве не это означает, что Мне нужно было бы выполнять полное сканирование таблицы каждый раз, когда я хочу узнать, какие спойлеры находятся на полке? Может ли это повлиять на производительность, если я ожидаю сотни тысяч записей в каждой таблице?
Моя третья мысль была создать схождения таблицу:
CARS CarId CarDesc
CARS_SPOILERS SpoilerId CarId
SPOILERS SpoilerId SpoilerDesc
Но не это оставляет возможность определения нескольких спойлеры для автомобиля, или наоборот? Должен ли я установить CARS_SPOILERS.SpoilerId и CARS_SPOILERS.CarId, чтобы быть уникальным?
Есть ли лучший способ сделать это, кроме того, что было упомянуто выше?
Благодаря