我必须构建一个允许完全模块化结构的数据库结构。让我们举个例子,它会更容易理解。
我们有一个网站记录,如下所示:
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)
通过这样做,我有一个存储数据的表,以及与两个网站共同的部分和子部分的“结构表”。如果管理员想要添加一个section / subsection,我们将回到树结构来存储额外的数据,如下所示:
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?另一个 ? 感谢阅读和你的答案!
答案 0 :(得分:0)
我建议您修改模型1。
您可以通过从该表中删除section
FK来消除id_website
表中的冗余,并在website
表与它之间创建一个新表。
此新表WebsiteSection
的PK包含FK到website
和FK到section
,允许每个部分成为多个网站的一部分。
所有网站共有的部分数据将存储在section
表中,而特定于站点的部分数据将存储在WebsiteSection
表中。