Позвольте сказать, что моя компания производит медицинские изделия, эти продукты используются во многих различных лабораторных испытательных приборах. Иерархия бизнес-логики выглядит следующим образом:
A lab has multiple locations (Up to thousands)
A location has multiple departments (Chemistry, Hematology, 3-5 per location)
A department has multiple instruments (No more than 10-20 instruments per location)
An instrument has many products.(No more than 1-5 product types per instrument)
Структура таблицы в настоящее время отражает бизнес-логику, как показано слева. Я предложил внести небольшое изменение, показанное справа.
Каковы некоторые плюсы и минусы каждого подхода? Я чувствую, как боковой подход левой может быть немного медленнее из - за цепочки так много Joins
подряд.
Самый большой "кон" я вижу, что подход с правой стороны заключается в том, что вы теряете связь между Департаментом и Местом. Для отношений, которые вы описали на своем посту, структура слева корректна с точки зрения дизайна.
ТЕМ НЕ МЕНИЕ...
Дизайн, который у вас есть, означает, что Масс-спектрометр на вашем объекте в Сан-Антонио будет иметь другой идентификатор, чем тот, который находится на вашем объекте в Денвере. Это предназначено?
------------------ пересмотр после обсуждения в комментариях ------------------
Вы описали пару отношений "многие-ко-многим" - местоположение будет иметь несколько инструментов, и несколько мест могут иметь один и тот же инструмент (например, масс-спектрометр). Чтобы поддержать это, вам понадобятся таблицы перекрестных ссылок. Вот исходный эскиз. Мой стандарт заключается в вызове первичного ключа таблицы "ID", и любое поле под названием "[имя-таблицы] _ID" является внешним ключом к соответствующей таблице:
Lab
ID
Name
Location
ID
Lab_ID
Street_Address
City
etc.
Department
ID
Name
Location_Department -- this lists the departments at a given location
ID
Department_ID
Location_ID
Instrument -- Scale, Oscilloscope, Mass Spectrometer, etc.
ID
Name
Description
Location_Department_Instrument -- inventory at a given location
Location_Department_ID
Instrument_ID
Instrument_Serial_Number
Дайте мне знать, если это имеет смысл.
SELECTs
которые будут использоваться. И иногда написаниеSELECT
указывает на ошибку в схеме.