簡體   English   中英

一個大表還是多個表?

[英]One Large Table or Multiple Tables?

我正在嘗試建立一個網站,其設計與Facebook小組的工作方式相似。 用戶將能夠加入組,然后在這些組中發布。 但是,我在創建關於組和帖子的數據庫架構時遇到了麻煩。 到目前為止,這是我的表架構:

Table 1: Users
Table 2: Groups
Table 3: Posts

每當用戶在組中發布時,posts表都會創建一行。 帖子表中的該行將具有該帖子所屬的組的唯一ID,以及創建該帖子的用戶的唯一ID。 我擔心的是,發布表將變得龐大,尤其是與“組”和“用戶”表相比。

考慮到每個小組有很多職位(數百到數千個),我應該為每個小組創建一個新表格嗎?

對此,任何和所有投入將不勝感激。

一言以蔽之。 您不應該創建多個表。 一個組表是合適的。 適當索引它應該沒問題。 對於數據庫來說,成百上千的帖子幾乎是什么,它旨在通過適當的索引來管理數百萬行。 表的一列應標識組的所有權,但您不應將其拆分為其他表。

在最壞的情況下,當表太大而無法容納磁盤空間時,您可以對表進行分區。 但是,它增長到如此之大的可能性非常小。

除非您有成千上萬的帖子,或者帖子可能很大,或者您的硬件非常有限,否則只要使用組ID索引,就可以使用單個MySQL表。

除非我們談到百萬條以上的行,否則只要您正確索引表(通過兩個ID進行索引)就可以了。

簡而言之,如果數據項之間存在某種依賴關系,則應創建一個新表。 您可以在此處更精確地查找它: http : //en.wiktionary.org/wiki/first_normal_form

它沒有說明每次表太大時都應創建一個新表。 對於數據庫管理員來說,那是一件好事。 在您的示例中,與5個月前撰寫的文章相比,最新文章的閱讀頻率更高。 為了正確建立索引並避免在數據行中重復,可以使用如下結構:

在此處輸入圖片說明

注)此圖說明了這一點; i)一個用戶將發布到一個或多個組,ii)一個組將擁有一個或多個用戶,iii)一個帖子將被一組中的一個或多個用戶查看。 這三個關系都是一對多的,並且用戶和組之間的基數是多對多的。

而且,您可以將您的帖子“分組/組織”,該表格可能隨着時間的推移而增長,可以分成數年,數月甚至數周。 這樣一來,您便可以說出在哪個時間段,您還可以將此時間因素設為帖子表中的日期字段,而不是單獨的表。

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM