Создание кормовой стенки - PullRequest
2 голосов
/ 21 июня 2010

У меня есть таблица пользователей и таблица вопросов.Таблица вопросов будет иметь записи, которые представляют «Вопросы», «Ответы» и «Комментарии» к вопросам или ответам.Я хотел бы создать панель управления для каждого пользователя, в которой можно увидеть действия, связанные с вопросами и ответами.Например, если пользователь A создает вопрос, а пользователь B отвечает ответом, а пользователь C отвечает комментарием на ответ пользователя B, то пользователи A и B могут видеть все эти действия в своих панелях.

Это работает аналогично тому, как работает домашняя страница Facebook, где, если я выкладываю видео, я вижу комментарии людей к своему видео.

Может кто-нибудь предложить простой способ моделирования этого в базе данных?

Ответы [ 4 ]

2 голосов
/ 21 июня 2010

Я считаю, что Facebook и др.и др.справиться с этим, имея отдельную базу данных общих записей «обновления», в которых есть краткое описание предпринятых действий.Всякий раз, когда кто-то выполняет действие на сайте, которое должно отображаться на стене, в базу данных обновлений также добавляется запись.

0 голосов
/ 21 июня 2010

enter code here @ Am, я предполагаю, что нужно прикусить пулю, и если вы используете MySQL, тогда используйте отношения или переходите на другой тип базы данных, если вы хотите полностью уйти от таблиц с отношениями. Вы хотите «чистую» реализацию нетипичной модели RDB. Для RDB я предлагаю вам использовать четыре таблицы: пользователи, user_map, вопросы, ответы. Ответы являются категориальными (например, на вопрос или ответ), поэтому проследите, к какому типу он относится, где единственными внешними ключами в любой таблице являются question.id и user.id.

Users: id, name
User_map (can be used with Questions and/or Responses to join the data): u_id, q_id
Questions: id, text_value
Responses: id, q_id, text_value, category

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

0 голосов
/ 21 июня 2010

Если вы собираетесь использовать одну таблицу, вы можете попробовать что-то вроде этого.

TABLE {ID, ParentID, UserID, Type, Text, PostDtm}

Это дает вамбазовая древовидная структура в одной таблице.

Компромисс в том, что у вас могут быть более сложные запросы, и может потребоваться больше из них, чтобы достичь желаемого.

убедитесь, что у вас есть индексыкак минимум в столбцах id.

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

0 голосов
/ 21 июня 2010

Хорошо, вот что вы можете попробовать ... вы не можете испортить вопросы, ответы и их комментарии в одной таблице. Один вопрос может иметь много ответов, а разные ответы могут иметь разные комментарии.Хранить их все в одной таблице будет довольно грязно и не рекомендуется (вопреки правилам RDBMS).Составьте три отдельные таблицы: одну для вопросов, одну для ответов и одну для комментариев.Определите отношения между ними на основе первичного и внешнего ключей. Таким образом, в любой момент времени в таблице вопросов у вас есть все вопросы, заданные всеми пользователями.Таблица ответов будет содержать все ответы, соответствующие этому конкретному вопросу, а таблица комментариев будет содержать комментарии к соответствующему ответу.Поддерживая правильные поддерживающие столбцы во всех таблицах, вы можете легко управлять тем, что вы хотите.В любой момент вы можете просмотреть все ответы, относящиеся к конкретному вопросу, присоединившись к таблице вопросов и ответов, а также просмотреть все комментарии, сделанные к конкретному ответу, присоединившись к таблице ответов и комментариев.

Надеждаэто дает вам ИДЕЮ ..

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