Я создаю новую базу данных SQL Server 2008. У меня есть две две таблицы, которые связаны между собой.
Первая таблица выглядит так:
BRANDS // table name
BrandID // pk
BrandName // varchar
Вторая таблица выглядит так:
MODELS // table name
ModelID // pk
ModelDescription // varchar
У каждой марки будет хотя бы одна модель, и каждая модель будет принадлежать только одной марке.
Вопрос в том, должен ли я создать такую соединительную таблицу
BRANDS_MODELS // table name
RecordID // pk
BrandID
ModelID
Или я должен изменить таблицу MODELS, чтобы включить BrandID, как это
MODELS // table name
BrandID //
ModelID // pk
ModelDescription // varchar
Спасибо!
Если модель принадлежит только одному бренду, вы можете поместить FK для бренда на стол модели (ваш второй подход). Первый способ с таблицей соединений — это отношение «многие ко многим».
Исходя из того, что вы сказали до сих пор, я исключил бы соединительную таблицу и использовал бы обычный внешний ключ в таблице MODELS.
Но если модель может перемещать бренды, и вам необходимо поддерживать текущее соединение и историю, у таблицы соединений есть преимущества по сравнению с сохранением истории всей строки MODELS, когда меняется только внешний ключ. Также, если существуют другие вещи, которые могут быть связаны с отношением «сущность» больше, чем сущность MODEL, может иметь смысл иметь соединительную таблицу. Вы всегда можете установить уникальное ограничение для ModelID в соединительной таблице, чтобы гарантировать, что одна и та же модель не связана с несколькими брендами. Таким образом, хотя таблица соединений требуется для эффективной реализации отношения «многие ко многим», она также может быть полезна для отношений «один ко многим», где само это отношение имеет атрибуты.
Соединительные таблицы используются для отношений «многие ко многим», которые здесь не совсем подходят.
Например, вы не хотели бы включать создание Honda Civic и Toyota Civic. Это пример отношения марки / модели автомобиля, но оно должно соответствовать отношениям марки и модели.