0

我必须建立一个允许完全模块化结构的数据库结构。我们举个例子,会更容易理解。

我们有一个网站记录,如下所示:

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?另一个 ?感谢您的阅读和您的回答!

4

1 回答 1

0

我建议您修改模型 1。

section您可以通过从该表中删除id_websiteFK 并在该website表和它之间创建一个新表来消除表中的冗余。

这个新表WebsiteSection有一个 PK,它由一个 FK towebsite和一个 FK to组成section,允许每个部分成为多个网站的一部分。

然后将所有网站共有的部分数据存储在section表中,而特定于站点的部分数据将存储在WebsiteSection表中。

于 2013-08-17T14:35:00.313 回答