Я мог бы просто добавить столбец FK construct_id в таблицу char_enz
Это называется «денормализация», как вы знаете. Это связано с несколькими проблемами.
Вы храните несколько копий одной и той же информации. То есть я могу заглянуть в CHAR_ENZ
, чтобы найти имя фермента, или выполнить соединение 6 таблиц. Дополнительное хранилище является расточительным (но на самом деле, кого это волнует?), Но теперь также появляется возможность несоответствий. Как гласит старая пословица: «Человек с часами знает, который час; человек с двумя никогда не может точно сказать».
Это усложняет обновление. Если вы когда-либо хотели обновить имя фермента в партии, вместо того, чтобы просто обновить, скажем PRODUCED.CONSTRUCT_ID
, теперь вам также нужно не забыть обновить все имена ферментов в CHAR_ENZ
.
Денормализация не обязательно дьявол, но вы должны использовать ее только во избежание более серьезных проблем. Соединение с 6 таблицами, вероятно, не является "худшей" проблемой, достаточно плохой, чтобы ее оправдать (очевидно, на мой взгляд, с небольшими деталями). присоединиться. Вы можете рассмотреть возможность размещения таблиц PRODUCED
, PURIFIED_ENZ
и CHAR_ENZ
в кластере во время проектирования физической базы данных. Это должно минимизировать влияние на производительность. Вы также можете создать представление для инкапсуляции логики соединения c.
Если вы хотите денормализовать, вы можете выбрать не денормализовать «полностью». То есть, например, вы можете использовать составные ключи для денормализации, но при этом пользуетесь ограничениями целостности данных. Например,
PURIFIED_ENZ
==> первичный ключ (G_BATCH, P_BATCH)
CHAR_ENZ
==> первичный ключ (G_BATCH, P_BATCH, CHAR_ID)
Это также нарушение третьей нормальной формы, если вы хотите Вызовите полицию. Но это делает невозможным несоответствие между строкой CHAR_ENZ
и «денормализованным» столбцом G_BATCH
. Вы можете использовать G_BATCH
, чтобы уменьшить размер соединения, необходимого для получения имени фермента.
Последнее, что меня беспокоит в вашей модели данных, это то, что она, похоже, предполагает и требует, чтобы шаги 1 -3 добычи всегда будет прежней. Смена технологий; требования клиентов меняются. Я очень мало знаю о микробиологии, но, как правило, мне хотелось бы построить модель данных с меньшим количеством предположений. Вы могли бы сделать это, немного абстрагируя пакетные шаги.