У меня три таблицы: действия, сообщения, нравы. Он определяет наследование, сообщения и предпочтения - это детские действия (специализация).
Сообщение и как оба имеют столбец userId и createdAt. Разумеется, они должны быть перемещены в Parrent-таблицу Action и удалены из Message и Likes. Но есть только один случай, когда мне нужно выбрать как сообщения, так и понравившиеся из базы данных, в других случаях я выбираю только один из них - сообщения или отзывы.
Можно ли дублировать userId и createdAt в дочерней и паритной таблицах? Это стоит дискового пространства, но экономит одно соединение - мне нужно будет присоединяться к сообщениям, нравится с действиями каждый раз, когда мне нужны userId и createdAt. Whatsmore мне нужно будет изменить текущий код...
Что бы вы предложили?
По-моему, это случай преждевременной оптимизации (или преждевременная денормализация, если вы предпочитаете). Вы предполагаете, что накладные расходы соединения вызовут значительные проблемы, поэтому вы предполагаете, что дублирование столбцов userId и createdAt в зависимых таблицах значительно улучшит производительность.
Я предлагаю вам не дублировать столбцы, пока не узнаете, что есть настоящая проблема. Я держу несколько наблюдений за оптимизацией производительности, прилипшими к стене, чтобы напомнить себе, что я должен делать в подобных случаях:
Также несколько комментариев по денормализации:
По моему опыту, я не могу определить, где будут возникать проблемы с производительностью перед написанием кода. Проблемы всегда, кажется, происходят в тех местах, где я никогда не думал бы выглядеть. Таким образом, я обнаружил, что мой лучший выбор - всегда писать самый простой и ясный код, который я могу, и создавать базу данных так же просто, как я могу, следуя правилам нормализации, насколько это возможно, а затем решать, что оказаться. Там могут быть проблемы с производительностью, которые требуют внимания (но, что удивительно, на самом деле это не так часто), но в итоге я получаю простой, понятный и легко понятный/поддерживаемый код, работающий на простой, хорошо продуманной базы данных.
Поделитесь и наслаждайтесь.