關於資料表反三範式的一點疑問?

來源:互聯網
上載者:User
一個簡單的問題:

文章分類表:

article_type(id, name, pid, num)

這個num是該分類下的文章數量,我之前一直就是這樣的,在新增文章或者刪除文章時都會更新對應分類的num欄位。

但是現在我覺的這好像沒有必要,因為每個文章分類下面的文章數量可以通過文章表很容易的count()算出來,所以就覺得這個num是多餘的了,並且編輯文章操作時還要更新article_typenum感覺有點煩。

我想取消這個欄位,但是又很糾結,因為,這樣以後相對的select語句會增多,以前直接從num取就行了,現在每次都要count()一下,有多少個分類就要count()幾下,感覺是不是相對於以前而言有效能問題,不太合理呢?

感覺就這麼個簡單的問題就已經涉及程式的耦合,表的範式設計等考量。

糾結,希望大神指點,謝謝!

回複內容:

一個簡單的問題:

文章分類表:

article_type(id, name, pid, num)

這個num是該分類下的文章數量,我之前一直就是這樣的,在新增文章或者刪除文章時都會更新對應分類的num欄位。

但是現在我覺的這好像沒有必要,因為每個文章分類下面的文章數量可以通過文章表很容易的count()算出來,所以就覺得這個num是多餘的了,並且編輯文章操作時還要更新article_typenum感覺有點煩。

我想取消這個欄位,但是又很糾結,因為,這樣以後相對的select語句會增多,以前直接從num取就行了,現在每次都要count()一下,有多少個分類就要count()幾下,感覺是不是相對於以前而言有效能問題,不太合理呢?

感覺就這麼個簡單的問題就已經涉及程式的耦合,表的範式設計等考量。

糾結,希望大神指點,謝謝!

第一,設計是遵守範式的,這代表你在設計表的初衷是儘可能少的冗餘.
第二,適當的反範式,特定的場合下嚴格的範式反而導致嚴重的效能影響,這意味著你需要在"優雅的設計"和"實用主義"之間做權衡,這一點需要根據你業務的不同來看,永遠不要追求完美.

現在來看看你的情境,你的article_type增加了num的冗餘,這種情境下,能帶給你好處的是,當文章的w比較多,而你對每一類的num的即時性要求並不是那麼高,但你又需要頻繁的在多處顯示,甚至你可能是每天或者每個小時更新一下,這時候num的冗餘是合理的,你可能會減少需要select count(*)的過程.但當你只有只有很少的地方需要這個num,那麼count完全能滿足你的要求,而且不會帶給你看得見的效能損失,這種情況下,應該要遵守範式.

考慮放棄使用num能帶給你大多的麻煩,需要重構的代碼多嗎?會不會影響到核心的邏輯?是否可以把num做到cache中去呢?

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.