У меня возникли сомнения относительно дизайна базы данных, используемого в проекте, над которым я работаю. У меня три таблицы: Event
, ProductEvents
и Product
. ProductEvents
- таблица ссылок между Event
и Product
. Оба Event
и Product
имеют одинаковый внешний ключ.Должен ли я нормализовать или добавить FK в каждую таблицу
Для удаления записей в таблице ProductEvents
у меня нет внешнего ключа до Estate
и поэтому необходимо удалить его перед удалением. Теперь интересно, какое лучшее решение: либо добавить внешний ключ, либо присоединиться к таблице Event
или Product
для каждого запроса, который необходимо выполнить.
Принимая во внимание нормы нормировки, я должен только рассмотреть вариант объединения. Однако для этой проблемы есть и предыстория. У нас есть другие таблицы, например. House
и Interior
, где Interior
имеет FK до House
. House
имеет дискриминатор до Estate
и содержит приблизительные 10 миллионов записей. Interior
содержит пару 100 миллионов записей. Только недавно мы были вынуждены добавить дискриминатор в таблицу Interior
, потому что соединения становились слишком тяжелыми и медленными, даже когда мы убедились, что набор результатов остался как можно меньше.
Какая у вас лучшая/распространенная практика для этой проблемы? Лучше ли иметь общий дискриминатор в каждой таблице или придерживаться объединений?
Я чувствую себя глупо, но должен признать, что я не знаю, что такое дискриминатор. Что означает «Оба события и продукт имеют одинаковый дискриминатор»? Можете ли вы показать структуры таблиц, чтобы проиллюстрировать, о чем вы говорите? –
Не нужно чувствовать себя глупо. Возможно, я использую неправильное ключевое слово. Я имел в виду иностранный ключ. Обновленное описание соответственно и добавленный эскиз ERD. – Nicolas