2016-12-13 4 views
1

Я создаю систему с группами. Их можно рассматривать как группы Facebook. Пользователи могут создавать новые группы. В настоящее время у меня имеются следующие группы:Database Design для системы, которая имеет Facebook как группы

  • Группа города - Группы, основанные на определенном городе. Например, «London Buy and Sell Group»
  • Школьная группа - группы, основанные на школах. Например, «Исследовательская группа Лондонского университета»
  • Группа интересов - группы, которые не привязаны к месту. Например, «Вязальная группа более 50 лет»

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

  • Идентификатор
  • Создатель ID
  • Имя
  • Опция Описание

I «Я пытаюсь собрать для этого дизайн базы данных. Моя первоначальная мысль заключалась в создании разных таблиц для разных групп.

Например, у одной таблицы есть group. Эта таблица имеет id, creator id, name, description, member count, timestamps.

Затем введите другие таблицы, чтобы представить другие группы, и соедините их с group. Поэтому у меня есть таблица city_group, которая содержит и id, group_id, city_id. И то же самое для других типов групп.

Единственная проблема с этим - interest_group не имеет каких-либо дополнительных данных о нормальном group. Но для того, чтобы иметь возможность запрашивать только группы интересов, я подумал, что имеет смысл создать таблицу interest_group. Он будет иметь только следующие столбцы: id, group_id, timestamps ... который кажется немного расточительным, чтобы иметь таблицу только для этой цели.

Вот диаграмма, чтобы сделать вещи проще: enter image description here

Есть ли какие-либо проблемы с моим решением, или какими-либо более эффективными способами решения этой проблемы проектирования?

+0

У вас есть некоторые предопределенные типы групп?Что произойдет, если пользователь создаст новую группу? Будет ли это группой интересов? Или вы единственный, кто может добавлять группы позже? –

+0

Группы, созданные пользователями, будут «группой городов» и «группой интересов». Только администраторы могут создавать «школьные группы». В будущем появятся другие группы, такие как «спортивная группа», представляющая спортивные команды и т. Д. – BugHunterUK

+0

Интересный вопрос у вас здесь. Что относительно членов, которые находятся в этих группах? Будет ли таблица пользователей и таблица ссылок между пользователями и группами? –

ответ

3

У меня есть идея, которая является обходным решением в основном: есть другая таблица типа: group_type, в которой у вас есть идентификатор (PK), а затем у вас есть имя_таблицы (полное имя таблицы типа).

Затем вы должны иметь FK из таблицы Group, ссылаясь на эту таблицу group_type.

id tablename 
-------------------- 
1  School Group 
2  Interest Group 

В конце концов это будет сделано, вы можете создавать свои запросы на основе значений из этой таблицы, в качестве примера:

JOIN (SELECT tablename FROM group_type WHERE id=group.group_type_id) ON ..