Одна таблица с большим количеством столбцов против нескольких таблиц с меньшим количеством столбцов

8

Каким будет лучший дизайн базы данных для сайта социальной сети? Одна таблица с большим количеством столбцов и меньшим количеством строк, или несколько таблиц с меньшим количеством столбцов, но большим количеством строк?

Например: пользователь может опубликовать обновление на своей стене или в группе.

Я могу придумать две конструкции базы данных:

Дизайн 1

UserPosts

  • Я бы
  • ID пользователя
  • после
  • Дата и время

UserGroupPost :

  • Я бы
  • идентификатор_группы
  • ID пользователя
  • после
  • Дата и время

Потенциальная проблема : может потребоваться соединение, которое может (в будущем) быть медленным запросом.

Дизайн 2

Сообщения :

  • Я бы
  • ID пользователя
  • идентификатор_группы
  • после
  • datetime (где groupid будет нулевым, если пользователь постит на своей стене)

Потенциальная проблема : цикл по большому набору данных может занять (долгое) время.


Как повысить производительность при увеличении данных? Есть ли другой (лучший) способ?

Сиддхарт Патель
источник
Для меня несколько столбцов больше строк. Управлять порциями проще, чем иметь большой набор данных. Если ваша большая проблема - большие данные в будущем, не надо. Sql-сервер спроектирован с такой проблемой, все, что вам нужно сделать, это спроектировать его правильно. Наличие большого набора данных не проблема, если вы знаете, как оптимизировать свой запрос
Винсент Дагпин
Использование плана выполнения действительно большая помощь. Он говорит вам, в чем проблема с вашим запросом. PS: не делайте цикл, если возможно, используйте массовую обработку, эта функция уже есть, используйте ее
Винсент Дагпин

Ответы:

2

Здесь я всегда склоняюсь к варианту 1 или, по крайней мере, в том же духе. Не беспокойтесь слишком сильно о попытке исключить необходимость объединения таблиц в будущих запросах - любая нормализованная база данных будет использовать объединения в любых полезных запросах, это просто реляционные базы данных.

Кроме того, зачем вам обязательно нужно присоединяться к таблицам userPosts и userGroupPosts для вашего сайта? Разве они не будут отображаться отдельно? Единственная причина, по которой вы бы присоединились к этим таблицам, может быть, при поиске сообщений, но не должно быть слишком сложно написать эффективные запросы для этого. Кроме того, вы можете захотеть запросить таблицы для целей анализа, но это не является основной целью этой базы данных.

Дизайн 2 может, по крайней мере, означать, что вы получите очень занятой стол.

Тем не менее, лучшим вариантом было бы создать прототип каждого и выполнить несколько тестов. Создайте прототип каждого варианта проектирования и проведите некоторое тестирование производительности для различных операций с некоторыми фиктивными данными.

Ian_H
источник
-3

Для меня, согласно вашей нынешней структуре, дизайн 2 лучше. Вы можете реализовать разбиение, оптимизированный запрос и структурированный способ создания базы данных / таблицы, что сократит время выполнения. Но в некоторых случаях нормализация работает лучше, но полностью зависит от вашей архитектуры проектирования баз данных.

Dipa
источник