2011-05-30 3 views
4

Я создаю систему, в которой пользователи могут присоединиться и создать группы. В этих группах, участники могут создавать темы и отвечать на сообщения, уже созданных, так что я хотел бы знать Ваше мнение, какой из следующих способов лучше: Создайте две таблицы, groups_posts и group_topics:Схема таблицы групп пользователей

--group_topics 
id PK 
group_id int FK 
user_id int FK 
title varchar(50) 
content varchar(500) 
status int 

--group_posts 
id PK 
topic_id int FK 
user_id int FK 
content varchar(500) 
status int 

или создать уникальную таблицу, group_tposts:

--group_tposts 
id PK 
group_id int FK 
user_id int FK 
is_topic boolean 
title varchar(50) 
content varchar(500) 
status int 

ответ

10

На основании вашего описания, мне кажется, что немного больше может понадобиться. Может быть что-то вроде:

  • В одной группе может быть много пользователей.
  • Один пользователь может принадлежать многим группам.
  • В группе пользователей создаются темы (тема = тема, тема; категория или общая область интересов.)
  • В теме пользователи создают новые сообщения или отвечают на предыдущие сообщения.

enter image description here

Примечание: добавить поле контента в Post.

+0

В случае производительности, использование двух таблиц, кажется, приносит немного (большее?) Влияние, но организация намного лучше. В социальных сетях, таких как myspace и facebook, вы считаете, что это будут отдельные таблицы? – JCM

+0

Могу ли я предложить создать единую таблицу для пользователей и групп. Затем у вас есть флаг «IsGroup/IsUser». Таким образом, вы также можете поместить группу в группу и установить разрешения для единственного пользователя. –

1

Это действительно зависит от:

чехол для комбинированной таблицы
Учитывая тот факт, что логическое значение принимает только один байт, объединенная таблица - неплохая идея.
Обратите внимание, что создание индекса на поле is_topicне будет работать из-за его low cardinality.

MySQL (или любая другая база данных) откажется использовать индекс в этом поле, но вместо этого сканирует таблицу.

чехол для отдельных таблиц
Если вы планируете использовать отдельные сообщения из темы часто, я предлагаю отдельные таблицы.
Поскольку выбор на них будет быстрее, MySQL не должен выполнять полное сканирование таблицы, чтобы отделить сообщения от тем.

+0

«Если вы планируете использовать сообщения отдельно от тем часто», я не могу представить себе такой сценарий, как бы это было? – JCM

Смежные вопросы