2016-12-13 2 views
1

私はグループを持つシステムを作成しています。これらはFacebookグループのように考えることができます。ユーザーは新しいグループを作成できます。現在、私は次のタイプのグループを持っています:Facebookのようなグループを持つシステムのデータベース設計

  • 都市グループ - 特定の都市に基づくグループ。たとえば、「London Buy and Sell Group」
  • 学校グループ - 学校に基づくグループ。たとえば、「London University Study Group」
  • 興味グループ - 場所に結ばれていないグループ。たとえば、「50's Over Knitting Group」

今後、さらにグループタイプが追加されます。各グループは、オプションの異なる型を持つことができますが、すべてのグループが同じ基本的なデータを持っている:

  • ID
  • クリエータID
  • オプションの説明

Iをこのためのデータベース設計をまとめることに苦労しています。私の最初の考えは、異なるグループの異なるテーブルを作成することでした。

たとえば、groupという単一のテーブルがあります。このテーブルは、id,creator id,name,description,member count,timestampsを有する。

他のグループを表すテーブルがあり、それをgroupにリンクします。だから私は、group_idcity_idを含むcity_groupテーブルがあります。他のグループタイプについても同様です。

私がこれを持っている唯一の問題は、interest_groupには通常のgroupという余分なデータがありません。しかし、インタレストグループのみを照会できるようにするには、interest_groupテーブルを作成することが理にかなっていると思っていました。それは次の列だけを持っています:idgroup_idtimestamps ...この目的のためだけにテーブルを持っているのは少し無駄です。ここで

は、物事を容易にするための図です: enter image description here

は、私の解決策に問題、またはこの設計上の問題を解決するために任意のより良い方法はありますか?

+0

あなたはグループのいくつかの定義済みの型を持っていますか?ユーザーが新しいグループを作成するとどうなりますか?それは利益団体になるのだろうか?または、後でグループを追加できるのはあなただけですか? –

+0

ユーザが作成したグループは 'city group'と' interest group'になります。管理者だけが「学校グループ」を作成できます。将来的には、スポーツチームを代表する「スポーツグループ」など、他のタイプのグループも存在します。 – BugHunterUK

+0

ここにある興味深い質問です。これらのグループに所属するメンバーはどうですか?ユーザーテーブルとユーザーとグループの間のリンクテーブルのようなものがありますか? –

答えて

3

私はアイデアを持っています。これは基本的に回避策です。id(PK)を持つgroup_type、次にtablename(タイプの完全なテーブル名)があります。

次に、このgroup_typeテーブルにリンクしているGroupテーブルからFKを取得する必要があります。

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

このすべてが完了した後、あなたは一例として、このテーブルの値に基づいてクエリを構築することができ:

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

関連する問題