我必須構建一個允許完全模塊化結構的數據庫結構。我們舉一個例子,它會更容易理解。SQL可調結構冗餘
我們有一個網站記錄,看起來像這樣:
WEBSITE A
| ----- SECTION A
| |-- SUBSECTION 1
| | | -- Data 1 : Value 1
| | | -- Data 2 : Value 2
| | | ...
| | | -- Data N : Value N
| |
| |-- SUBSECTION 2
| | | -- Data 52 : Value 1
| | | -- Data 53 : Value 2
| | | ...
| | | -- Data M : Value M
| |
| ...
|
| ----- SECTION B
| |
| ...
...
模型1:
等。麻煩的是我必須實施許可制度。例如,用戶A可以訪問網站1中的A,B,D,Z部分,而用戶2可以訪問網站2中的C,V,W,X部分。 首先,我認爲將它構建爲樹最有效的方法。 這是我的第一個數據庫表示:
TABLE website (id, id_client, name, address)
TABLE section (id, id_website, name)
TABLE sub_section (id, id_section, name)
TABLE data (id, id_sub_section, key, value)
藉助這種表示,這將是很容易給員工一些受限制的訪問。 但是,這兩個網站都會有共同的數據。例如,所有網站將具有相同結構的部分A,B,C,D。這意味着大量的冗餘。對於每個網站,我們會有很多共同結構,唯一的區別將是TABLE數據中的屬性值。
第二個問題是這個結構必須完全模塊化。例如,管理員應該能夠將一個部分,一個子部分或一個數據添加到網站記錄中。這就是爲什麼我認爲這種模式更容易管理的原因。
模型2:
我有一個第二個模型,更容易儲存,但難以利用:
TABLE website (id, id_client, Value 1, Value 2, Value 3 ... Value N)
TABLE section (id, name, Data 1, Data 2, Data 3 .. Data N, ..., Data 52, Data 53, Data M) (it represents the name of the columns)
TABLE subsection (id, id_section, name, Data 1, Data 2, Data N)
通過這樣做,我有其中數據被存儲的表和「結構表「與這兩個網站共同的章節和小節。如果管理員想添加一個節/小節,我們要回樹結構來存儲數據的其它附加,看起來像這樣:
TABLE additional_section (id,id_website,name)
TABLE additionnal_subsection (id,id_section, id_additional_section, name)
TABLE additional_data (id, id_subsection, id_additionnal_subsection, key, value)
它避免了大量的冗餘和便利的權限管理。
我的問題是:
什麼是這種應用的最佳模式?模型1?模型2?另一個 ? 感謝您的閱讀和答案!