2012-02-06 215 views
3

用戶社交網絡DB架構?

    • 鏈接
      • 用戶1
      • 用戶2
      • 時間(或其他一些相關的鏈接數據)
    • 帖子

如果用戶屬於屬於該帖子所屬的同一組的鏈接,則用戶只能看到帖子。

我想優化數據庫以查詢給定用戶被允許查看的所有帖子。構建數據庫來執行此操作的最佳方法是什麼?

感謝您的幫助!

編輯:上面的模式是一個基本的想法,讓你開始。再次感謝!

+0

我不完全得到實體'link'。那是因爲「User1自從Time以來一直是User2的朋友」嗎?如果是這樣的話,爲什麼鏈接屬於一個組?我將它理解爲屬於一個組的用戶。讓我知道你是如何看待這個 – 2012-02-06 05:00:39

+0

對不起,花了這麼長時間才能回到你身邊。以下是我的想法:用戶有一個其他多個用戶的組。我需要存儲關於例如當多個用戶中的一個遇到父用戶時,這就是爲什麼我想包含鏈接對象的原因。該鏈接由參與該鏈接的兩個用戶擁有,因此他們都可以看到他們什麼時候見面以及在哪裏見面。同時,如果您再次查看該父級用戶,則應該能夠遍歷所有組,並通過這些組中的所有用戶(通過鏈接對象)獲取屬於每個用戶的帖子---- – Andrew 2012-05-20 18:57:10

+0

----這些多個用戶,因此您可以生成帖子的聚合列表。考慮到它需要經常進行,這個帖子查詢應該儘可能地少用資源。 – Andrew 2012-05-20 18:59:38

回答

3

這是我怎麼會對此建模:

用戶(身份證等)

這是用戶列表。它只包含用戶數據。在PK將是id,所以會出現有一個隱含的指數

組(身份證等)

這組列表中。它只包含組數據。在PK將是id,這樣就會有一個隱含的指數有

User_Groups(用戶ID,的groupId等)

這是用戶鏈接到組的方式。它需要擁有用戶和組的外鍵,並且您可以添加任何其他數據,例如用戶加入組的日期。此處的PK將是userIdgroupId之間的複合關鍵字,因此索引將爲userIdgroupId。你也想擁有在groupId附加指標,因爲「主令」將被userId給予,而不是由groupId

帖子(ID,createdByUserId,belongsToGroupId等)

這是帖子列表。帖子僅由用戶創建,只屬於一個組。要顯示一篇文章,您將加入用戶表的createdByUserId(顯示創建該文章的用戶的名稱)。此外,您還需要檢查是否允許用戶查看帖子。因此,您將轉到User_Groups表並使用類似於$currentUserId = users_groups.userId and $currentPostBelongsToGroupId = users_groups.groupIdWHERE子句(或者您可以加入post.belongsToGroupId = user_groups.groupId的表)。

這是一般的想法。現在,要專注於「優化數據庫以查詢允許給定用戶看到的所有帖子」,您應該基本上按照我在「帖子」實體描述中所述的內容進行操作。由於您不想查找特定的帖子,因此您必須使用User_Groups加入帖子(此加入將使用在User_Groups實體上創建的groupId索引),然後使用在此指出的WHERE子句。該子句將使用在該實體上創建的複合主鍵。就是這樣。它似乎是一個完全索引的路徑。

現在,爲什麼我沒有添加link實體?因爲我不知道它是什麼,你沒有回答我的評論,詢問它是什麼。如果它是2個用戶之間的鏈接,則它不應該屬於一個組,因爲用戶分別屬於組,而不是成對。除此之外,如果鏈接是我所設想的,那麼就不會影響用戶看到他/她自己允許的帖子的表現。可能與questionlink實體

希望這有助於或引導你到一個更好的解決辦法:)