2011-05-30 25 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 2011-06-01 16:55:35

+0

我可以建議你爲用戶和組創建一張表。然後你有一個標誌「IsGroup/IsUser」。通過這種方式,您也可以將一個組放入一個組中,併爲單一用戶設置權限。 – 2015-02-24 14:01:50

1

這真的取決於:

案例爲合併表
鑑於布爾值只需要一個字節,組合表並不是一個壞主意。
但請注意,創建is_topic的索引將不起作用,因爲它的low cardinality

MySQL(或任何其他數據庫)將拒絕使用該字段的索引,而是進行表掃描。

案例爲獨立的表
如果您打算使用文章的主題往往分開,我建議單獨的表。
因爲這些選擇會更快,所以MySQL不必執行全表掃描就可以將帖子與主題分開。

+0

「如果您計劃使用與主題分開的帖子」,我無法想象這樣的情景,它會是怎樣的? – JCM 2011-06-01 16:56:41