Drupal权限表

时间:2012-01-23 08:25:29

标签: php drupal database-design

如果您已经看过drupal权限表,那就像

结构1

pid rid    perm                   tid
1    1   view f1, edit f2          0
2    2   view f1                   0

对于structure1有什么好处?

为什么drupal不使用这种结构?

table1

    fid      name
    1      view f1
    2      edit f2

table2

pid  rid  fid
1     1    1
2     1    2
3     2    1

1 个答案:

答案 0 :(得分:0)

您以这种方式组织数据的原因是访问模式(您如何使用数据)。简短回答 - 如果仅以一种方式访问​​数据,结构将更快。多快多少?对于给出的示例,它将是微不足道的,可能在数据库中保存了几毫秒。如果你进入结构2并且仍然少于10,000行,那么性能差异通常也是微不足道的。

当结构1说100,000行时,性能差异将变得更加显着,而结构2需要说1,000,000行来存储相同的数据。然后,根据查询的复杂性和返回的行数,您可能会注意到数百毫秒到一秒的查询执行时间差异。

让我们看看为什么,请他跟随查询:

 SELECT permission
 FROM perm 
 WHERE role = 1

结构1的优点:

返回存储在磁盘上单个位置的每个角色的单行。磁盘寻道时间减少了。

结构1的缺点:

如果我们想要查找具有编辑权限的所有角色,该怎么办?这有点棘手,我们(或数据库)需要处理记录 - 这是CPU密集型的。所以这是一个主要的缺点,但是......如果我们从来没有以这种方式访问​​数据,或者我们很少以这种方式访问​​数据,并愿意接受成本那么无关紧要。

结构2的优点:

由于数据已规范化,因此很容易找到属于某个角色的所有权限,或者具有权限的所有角色。这是一个更灵活的结构。

结构2的缺点:

鉴于第二种结构,构成每个角色权限的记录可能存储在磁盘上的不同位置。这意味着对于非常大的表,性能将比结构1差。

结论: 结构1可能被选择为提供(非常轻微)给定数据如何使用的性能。它有点复杂(因此关于为什么做出这个设计决定的问题)。 Drupal 7可能采用结构2,因为它更简单,并且在常见情况下性能差异可以忽略不计。