Как вы структурируете базу данных, которая позволяет голосовать, подобно тому, как это делает stackoverflow?

Я новичок в базах данных и веб-разработке, но я изо всех сил стараюсь учиться, создавая свой собственный динамический веб-сайт. Я делаю это шаг за шагом и в настоящее время разрабатываю модель данных на бумаге. Мне интересно, как можно структурировать базу данных для веб-сайта, который позволяет голосовать, как это делает stackoverflow? Если есть таблица, содержащая список вопросов, каждый вопрос, созданный пользователем, добавляется в эту таблицу. В этой таблице не может быть просто поля для подсчета голосов, потому что это позволило бы одному человеку иметь неограниченное количество голосов, верно? Значит, должен быть ключ, который подключается к другой таблице, которая подсчитывает голоса и отслеживает пользователей, чтобы они не могли проголосовать дважды, верно? Если это правда, это та часть, где я запутался. За каждый данный ответ также можно проголосовать. Значит ли это, что когда пользователь отправляет ответ, в дополнение к добавлению этого ответа, возможно, в отдельную таблицу для ответов на заданный вопрос, модель также должна динамически генерировать новую таблицу для каждого ответа во время выполнения, чтобы отслеживать все эти голоса?

Обратите внимание, что я спрашиваю не конкретно о том, как это делает stackoverflow, а о том, как работает концепция взаимодействия с пользователем.

Я также хотел бы сделать запрос об активности одного пользователя, поэтому, если все эти таблицы должны создаваться динамически для каждого фрагмента отправленных данных, создание дерьмовой загрузки таблиц с течением времени не будет Не будет ли очень медленно анализировать каждую таблицу, чтобы проверить, предоставил ли конкретный пользователь какие-либо данные или проголосовал ли он?

Есть ли лучший способ сделать это, который кто-нибудь может объяснить в терминах непрофессионала? Нет необходимости в конкретном коде... Я, вероятно, смогу понять это позже, когда придет время. Сейчас я просто теоретизирую и строю бумажную модель, чтобы отработать ее позже.

РЕДАКТИРОВАТЬ: О, понятно. Когда я думаю о таблицах базы данных, я думаю в таблицах, подобных Excel, поэтому поправьте меня, если я ошибаюсь. Таким образом, каждое голосование по всему сайту находится в одной таблице (перечисленной вертикально в электронной таблице), каждая из которых имеет строку данных (горизонтально), которая связывает голосование с различными владельцами (пользователь и вопрос ИЛИ ответ)? Это правильно? Я говорю вопрос ИЛИ ответ, потому что я не понимаю сценарий, в котором имело бы смысл использовать их оба в качестве атрибута голосования (не уверен, что это правильная терминология) вместо создания двух отдельных данных голосования для ответа и вопроса, которые оба находится на голосовании. По сути, как я это вижу, каждая строка представляет голос и есть 3 поля: 1. Значение (+1 или -1), 2. От кого (имя пользователя), 3. Кому (вопрос или ответ).

5
задан user1263500 12 March 2012 в 13:33
поделиться