Схема таблицы группы пользователей - PullRequest
4 голосов
/ 30 мая 2011

Я создаю систему, в которой пользователи могут присоединяться и создавать группы. В этих группах участники могут создавать темы и отвечать на уже созданные темы, поэтому я хотел бы узнать ваше мнение о том, какой из следующих методов является лучшим: Создайте две таблицы: 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

Ответы [ 3 ]

10 голосов
/ 31 мая 2011

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

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

enter image description here

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

1 голос
/ 30 мая 2011

Я думаю, что две таблицы лучше ...

Вы можете увидеть, как нормализовать систему данных в Википедии http://en.wikipedia.org/wiki/Database_normalization

1 голос
/ 30 мая 2011

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

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

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

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

...