2012-02-22 49 views
0

我有一個名爲帳戶的表格,我計劃讓每個帳戶都有一個連接到它們的項目符號列表,用戶可以隨時在其賬戶中添加另一個項目符號點。在設計數據庫時,似乎最小化表是最好的方法?

我想在我的數據庫中建模的明顯方法是有一個'帳戶'表和'子彈'表。 「項目符號」表中的每一行都將包含「帳戶」是項目所有者的密鑰,當然還有將顯示在項目符號旁邊的數據。

現在,如果我想加載帳戶網頁,我不僅需要從帳戶表中提取數據以獲取帳戶的基本信息,例如名稱等,但我也必須查詢「子彈」表查找與此帳戶ID相關的所有行。

反對只是存儲一個TEXT數據類型,我會編輯時添加一個新的子彈點,我們通常選擇爲此建立一個完整的單獨的表。在這種情況下,將所有數據存儲在賬戶表中是不是更好? (即使它是一個多關係)

我在這裏的想法有什麼問題嗎? (如果我們假設我們總是需要/選擇與當前帳戶有關的所有項目符號點,我不認爲這是I/O問題)

+0

「_bullet point_」是什麼意思?你是否需要以任何其他方式查詢「子彈」表(搜索滿足特定標準而不屬於特定帳戶的子彈)? – penartur 2012-02-22 05:51:32

+0

這不是關於*最小化您的表 - 這是關於**正常化**您的數據庫模式。這就是重中之重。 [閱讀關於數據庫規範化](http://en.wikipedia.org/wiki/Database_normalization),並瞭解該知識並將其應用於您的任務! – 2012-02-22 06:22:07

回答

3

這取決於您的使用模式。如果您沒有令人信服的理由,請使用normalization設計,至少3:rd normal form

正常形式可以幫助您保持數據的一致性和可搜索性。

不使用正常形式的原因通常是性能原因。在數據倉庫中,您通常儘可能使數據非規範化以獲得良好性能,但在修改數據的系統中,只要有可能,就堅持使用正常形式。

+1

+1此外,僅僅因爲你有2個表格並不意味着你有2個查詢來獲取數據。您可以使用連接在一個查詢中獲取所有數據。 – InSane 2012-02-22 06:06:04

0

看起來像一個很好的模式可能會有一個帳戶表和一個項目符號表,然後創建一個視圖,連接一個特定帳戶的所有項目符號,並將其作爲列添加到所有帳戶列風景。通過這種方式,您只需在Bullet表中插入一行即可輕鬆添加項目符號,而不必根據項目符號列的先前內容創建更新聲明,同時還可以執行單個查詢以選擇帳戶和項目符號數據。

相關問題