如果您已经看过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
答案 0 :(得分:0)
您以这种方式组织数据的原因是访问模式(您如何使用数据)。简短回答 - 如果仅以一种方式访问数据,结构将更快。多快多少?对于给出的示例,它将是微不足道的,可能在数据库中保存了几毫秒。如果你进入结构2并且仍然少于10,000行,那么性能差异通常也是微不足道的。
当结构1说100,000行时,性能差异将变得更加显着,而结构2需要说1,000,000行来存储相同的数据。然后,根据查询的复杂性和返回的行数,您可能会注意到数百毫秒到一秒的查询执行时间差异。
让我们看看为什么,请他跟随查询:
SELECT permission
FROM perm
WHERE role = 1
返回存储在磁盘上单个位置的每个角色的单行。磁盘寻道时间减少了。
如果我们想要查找具有编辑权限的所有角色,该怎么办?这有点棘手,我们(或数据库)需要处理记录 - 这是CPU密集型的。所以这是一个主要的缺点,但是......如果我们从来没有以这种方式访问数据,或者我们很少以这种方式访问数据,并愿意接受成本那么无关紧要。
由于数据已规范化,因此很容易找到属于某个角色的所有权限,或者具有权限的所有角色。这是一个更灵活的结构。
鉴于第二种结构,构成每个角色权限的记录可能存储在磁盘上的不同位置。这意味着对于非常大的表,性能将比结构1差。
结论: 结构1可能被选择为提供(非常轻微)给定数据如何使用的性能。它有点复杂(因此关于为什么做出这个设计决定的问题)。 Drupal 7可能采用结构2,因为它更简单,并且在常见情况下性能差异可以忽略不计。