7

我正在開發一個項目。它主要是爲了學習的目的,我發現實際上嘗試一個複雜的項目是掌握基礎知識後學習一門語言的最好方法。數據庫設計不是一個強項,我開始閱讀它,但它的早期和即時通訊仍在學習。涉及動態字段的數據庫結構

這裏是我的阿爾法模式,我真的在這裏我只是想記下所有我能想到的,看是否任何問題,跳出點。 http://diagrams.seaquail.net/Diagram.aspx?ID=10094#

我的一些顧慮我想反饋:

爲核心

通知屬性,如區域例子,可以說爲了簡單的領域是廚房,臥室,花園,衛生間和起居室。對於另一個可能成爲主頁,聯繫頁面,about_us,啓動畫面的客戶。它可以是2個區域,也可以是100個,不需要限制它。

我爲默認創建了單獨的表格,每個表格都鏈接到一個錯誤。後來我遇到了自定義字段的問題,如果有人想要標記該錯誤適用於哪些主題,我們可能不會有這種情況,那麼可能還有其他100個東西,所以我想堅持一組核心屬性和自定義字段給人靈活性。

但是當我到了自定義字段我知道我有一個問題,我不能要創建一個表,每一個自定義字段,所以我代替2個表。自定義字段和custom_field_values。這個想法是包括默認每場將被存儲在該表中,並且每個將被鏈接到值表,只會有這樣的事情

custom_fields table 
id   project_id  name 
01   1     area(default) 
12   2     rooms(custom) 
13   4     website(custom) 

custom_field_values table 
id   area   project_id sort_number 
667   area1   1    1 
668   area2   1    2 
669   area3   1    3 
670   area4   1    4 
671   bedroom  2    1 
672   bathroom  2    2 
673   garden   2    3 
674   livingroom  2    4 
675   homepage  4    1 
676   about_us  4    2 
677   contact  4    3 
678   splash page 4    4 

這看起來像一個有效的方式來處理動態字段這樣或還有其他的選擇嗎?

默認值將被硬編碼,所以你可以使用它們或換成你自己或者我可以創造一個又一個表,允許用戶編輯這將被鏈接到他們的項目的默認名稱。任何反饋都是值得歡迎的,如果計劃中存在的問題非常明顯,請隨時批評。

+0

唉EAV。如果我是你,我會看看NoSql的選擇。 –

回答

16

您已改造老反模式稱爲Entity-Attribute-Value。表中定製字段的概念在邏輯上與關係數據庫在邏輯上是不兼容的。 A relation具有固定數量的字段。

但是,即使它是不正常的關係,我們仍然需要有時這樣做。

有幾個方法來模擬SQL自定義字段,但其中大多數是打破規範化的規則。對於一些示例,請參閱:

+0

謝謝比爾,你會推薦一本書或資源,用例子解釋我如何將我的設計轉換爲合併類繼承,我不完全理解它到底是什麼或者如何使用MySQL實現它,但是現在我開始閱讀它,因爲你建議作爲我鏈接到的其中一個帖子的首選選項,如果有一個在線資源或書籍來解釋這個新手,那麼我會高興地購買它,到目前爲止,我正努力尋找好的解釋或例子。 – user1547410

+0

Martin Fowler的[企業應用程序體系結構](http://www.martinfowler.com/books/eaa.html)是類繼承的最佳書籍,以及許多其他應該瞭解的模式。 –

+0

謝謝,它看起來似乎越看越我的結構更適合一個Nosql數據庫,我以前沒用過它,但似乎更合乎邏輯的選擇,任何人都不同意? – user1547410