2017-01-19 6 views
1

Я буду использовать модель данных для базы данных транспортного средства, и я буду использовать диаграмму, найденную в databaseanswers.com, но есть вещь, которую я не понимаю.модель данных n <-> n связь, которую я не понимаю

Database Model

В этой схеме есть таблица "vehicle_model_categories", которая делает отношения между таблицами "vehicle_models" и "vehicle_category", до тех пор, пока не хорошо, но таблица "vehicles" также делает отношения между этими двумя таблицами, не понимает, что таблица "vehicle_model_categories" может служить. Не было бы лучше добавить индекс в таблицу "vehicule_model_categories" и сделать соотношение в таблице "vehicles"?

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

спасибо.

ответ

0

Vehicles об отдельных транспортных средствах. Представьте себе, что в США может быть 100M автомобилей. Vehicle_Categories - это гораздо более компактный набор, возможно, только 20-100 категорий (например, Compact, Convertible и т. Д.). Vehicle_Models также является относительно небольшим набором, возможно, не более 2000 (например, VW Beetle, VW GTi). Конечно, существует связь между сущностями в последних двух наборах. Например, «VW Beetle» можно классифицировать как «Компакт» как свою категорию. Это соотношение относительно невелико (например, 100 категорий для 2000 моделей). Хорошо иметь небольшой стол (возможно, только 2000 записей), который фиксирует эту взаимосвязь, чтобы можно было быстро ответить на такой вопрос:

  1. В какой категории находится модель «VW Beetle»?
  2. Какие модели относятся к категории "Компактные"?

Если мы удаляем таблицу Vehicle_Model_Categories и выражают отношения только в таблице Vehicles, то запросы на эти вопросы будут искать гораздо большую таблицу записей ~ 100M.

Избыточная информация

Так, строго говоря, конструкция DB имеет некоторую избыточность в ней, но это не в таблице Vehicle_Model_Categories, но в колонке Vehicles.Vehicle_Category_Code. Эта информация является излишней, поскольку можно написать запрос с JOIN стола Vehiclesбез колонка (но имеет столбец Model_Code) и таблицу Vehicle_Model_Categories и до сих пор получить информацию о Vehicle_Category_Code. Эта избыточность имеет свои плюсы и минусы.

  • Плюсы: Это может ускорить доступ Vehicles и не делает информацию более доступными (т.е. нет необходимости вступать с Vehicle_Model_Categories)
  • Минусы: Когда информация избыточна, она более легко получить противоречивая информация. Например, если в один прекрасный день модель получит , переклассифицируется в новую категорию (например,«VW Beetle» теперь классифицируется как как «Compact - Classifical»), тогда все данные Vehicle_Cetegory_Code в Vehicles должны быть обновлены.
+0

Hi @leeyuiwah, спасибо за ваш ответ, если я понимаю, это просто для оптимизации поиска? – aliasdoc

+0

@aliasdoc - Да. Но я также добавил некоторое обсуждение избыточной информации к моему ответу выше. Надеюсь, поможет! – leeyuiwah

+1

Спасибо @leeyuiwah за ваше объяснение, я понимаю, и я думаю, что я удалю отношения 'Vehicles.Vehicle_Category_Code', чтобы избежать избыточности – aliasdoc

 Смежные вопросы

  • Нет связанных вопросов^_^