Я новичок в создании баз данных и веб-разработок, но я стараюсь изо всех сил учиться на этом пути, создавая свой собственный динамический веб-сайт. Я делаю это шаг за шагом и в настоящее время разрабатываю модель данных на бумаге. Мне интересно, как создать структуру базы данных для веб-сайта, которая позволяет голосовать, как это делает stackoverflow? Если есть таблица, содержащая список вопросов, каждый вопрос, который создается пользователем, добавляется в эту таблицу. Не может быть просто поле на этой таблице, которое подсчитывает голоса, потому что это позволит одному человеку иметь неограниченные голоса? Таким образом, должен быть ключ, который соединяется с другой таблицей, которая подсчитывает голоса и отслеживает пользователей, чтобы они не могли голосовать дважды, правильно? Если это правда, это та часть, где я запутался. Каждый ответ также может быть проголосован. То есть это означает, что когда пользователь отправляет ответ, помимо добавления этого ответа, вероятно, к отдельной таблице для ответов на заданный вопрос, модель также должна генерировать новую таблицу для каждого ответа динамически во время выполнения, чтобы отслеживать все эти голоса?Как вы структурируете базу данных, которая позволяет голосовать так же, как это делает stackoverflow?
Обратите внимание, что я не спрашиваю конкретно о том, как это делает stackoverflow, но как работает концепция того, что работает пользователь.
Одна вещь, которую я также хотел бы сделать, - это запросить активность одного пользователя, поэтому, если бы все эти таблицы нужно было динамически создавать для каждой части представленных данных, создавая трещащую нагрузку таблиц с течением времени, 'действительно ли будет очень сложно анализировать каждую таблицу, чтобы проверить, предоставил ли какой-либо конкретный пользователь какие-либо данные или проголосовал?
Есть ли лучший способ сделать это, чтобы кто-то мог объяснить в мирянах? Нет необходимости в конкретном коде ... Возможно, я смогу понять это позже, когда придет время. Сейчас я просто теоретизирую и строю бумажную модель, чтобы работать позже.
EDIT: О, я вижу. Я думаю, что в Excel-таблицах, когда я думаю о таблицах базы данных, так исправьте меня, если мое понимание ошибочно. Таким образом, каждое голосование по всему сайту находится на одной таблице (перечисленной вертикально на электронной таблице), каждая из которых имеет строку данных (по горизонтали), которая связывает голосование с разными владельцами (пользователь и вопрос ИЛИ ответ)? Это верно? Я отвечаю на вопрос «ИЛИ», потому что я не понимаю сценарий, когда было бы разумно иметь их как атрибут «голос» (не уверен, что это правильная терминология) вместо того, чтобы создавать две отдельные голоса для ответа и вопрос, который проголосовали. В основном, как я вижу, каждая строка представляет собой голосование, и есть 3 поля, 1. Значение (+1 или -1), 2. От кого (имя пользователя), 3. К чему (вопрос или ответ).
[Понимание StackOverflow схемы базы данных] (http://sqlserverpedia.com/wiki/Understanding_the_StackOverflow_Database_Schema) – DOK
Попробуйте Google для многих-ко-многим, потому что это то, что у вас будет вопрос между пользователем и пользователем. – Sgoettschkes
Первое, что вам нужно сделать, это выбрасывать все ваши мысли, когда дело касается дизайна БД. Я видел, как многие db спускаются по пути «excel» и заканчивают беспорядок для поддержания. Посмотрите на отношения от одного до многих, от многих до многих отношений и нормализации db. Некоторые из них утверждают, что общая первая форма номенклатуры, но я всегда обнаружил, что 3-я нормальная форма - хороший компромисс между целостностью данных и удобством использования. – Brian