Эффективно ли объединять похожие объекты данных в одну таблицу? - PullRequest
0 голосов
/ 06 января 2020

Мне нужно хранить много похожих данных о моей системе вопросов и ответов, таких как голосование, подписка, закладки и т. Д. c.

В примере голосования, каков наилучший макет таблицы для хранения голосов за вопросы, ответы и сообщения?

  1. Храните голоса отдельно, то есть 3 таблицы получены: UserQuestionVotes, UserAnswerVotes и UserPostVotes

  2. Хранить голоса в одной таблице: UserVotes (id, user_id, item_id, item_type, voice), тогда как: item_id и item_type - это идентификатор и тип вопрос, ответ или пост, голосование = -1 / 1

Если я go первым путем, у меня будет не менее 9 таблиц. А если у меня go второй путь, то есть все данные в одной куче, значит, в будущем, при заполнении таблицы, она будет работать медленнее.

Какой способ в моем случае эффективен?

1 Ответ

1 голос
/ 06 января 2020

Если вы ищете мое мнение, Я бы выбрал дверь № 1. Вопросы, ответы и сообщения - это отдельные, хотя и связанные, «вещи». И с каждой из этих «вещей» тоже связаны «голоса»… но на самом деле «голос» - это не «вещь».

«Голос за вопрос» - это тесно связан с «вопросом». «Голосуй за ...» все остальное тоже самое. Так что теперь я начинаю думать о запросах, которые я, скорее всего, на самом деле напишу. Я, скорее всего, захочу написать запросы, которые, скажем, подсчитают, сколько голосов имеет тот или иной вопрос ... и я не очень хочу запутать этот запрос и сделать его "трудным для написания" или обязанным просмотрите список записей, которые не являются «голосами за вопросы». Другие типы голосов не будут иметь значения, и я бы не стал их отфильтровывать. (Если мне нужно написать запрос, чтобы подсчитать «сколько голосов за что-либо получил этот пользователь?», Я мог бы очень легко написать это независимо от этого.)

Это мое мнение. (The Менеджер баз данных может сам позаботиться о «эффективности». Спроектируйте свою базу данных так, чтобы запросы, которые нужно написать, были простыми и понятными для записи.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...