2017-06-22 28 views
1

我設計一個簡單的DB(仍在學習)設計的表

這裏適當關係是實體

用戶,主題,文章

用戶主題是多對多(用戶可對很多主題感興趣) 主題用戶是多對多的(一個主題可以被許多用戶感興趣) 用戶博客是一對多(用戶可以寫很多博客) 博客用戶是一對一的(可以編寫博客僅限一位用戶)

這裏是問題: 我應該仍然主題和博客之間的一對多關係?例如,如果我想查找某些主題的所有最新博客,一種方法是找到所有用戶,並按時間排列這些用戶的所有博客。

另一種方式是,如果我們通過建立博客關係主題(一對多)來保持冗餘,那麼我們可以直接從主題獲取所有博客,然後按時間排序。

我有點困惑,我有這個冗餘嗎?這裏有什麼最好的實踐(就後端程序員編程的簡易性和查詢效率而言?est users 100k,blogs 200k,Topics 20)

非常感謝!

添加圖片: enter image description here

回答

1

對於多對多的關係,你應該使用associative entity這意味着增加了橋接表來存儲關係,併爲一對多簡單地存儲在關係鍵爲外鍵約束。

說,你的模式可能看起來像:

  • 用戶
  • 主題
  • Users_Topic(其中主鍵將包括識別用戶和主題列)(
  • 文章,其中有一個用戶通過列的外鍵例如user_id)

關於文章和主題關係,不需要通過將其存儲在單獨的表中來進行冗餘,因此您可以在文章中包含外鍵。如果您很擔心查詢文章表,那麼我認爲您現在不應該考慮這一點,您可以創建一個存儲文章內容的表格,因爲它是表格中的空間並將其稱爲Article_Content與文章的外鍵也是這張新表的主要關鍵。

+0

非常感謝@Kamil –

+0

通過UserTopic表(通過多對多關係)實際做到這一點。但問題是關於我應該保持主題與博客關係。 –

+0

更新了我的答案,以包含有關文章和主題的其他信息。 –