什么时候应该在我的数据库中使用静态数组而不是新表?

时间:2012-07-27 11:16:35

标签: php acl database-performance static-array

我使用2个静态数组(用于角色和资源)实现了访问控制列表,但我在数据库中添加了一个新表来获取权限。

为角色使用静态数组的想法是我们不会一直创建新角色,因此数据不会一直在变化。我认为资源也是一样的,也因为我认为资源只是开发人员应该对待的东西,因为它们与代码而不是数据更相关。您是否知道为什么要使用静态数组而不是数据库表?当/为什么?

5 个答案:

答案 0 :(得分:2)

将代码值硬编码到代码中的问题是,与数据库更改相比,代码更改更加昂贵

  • 通常需要创建一个新的部署包。该软件包需要进行回归测试,以验证是否没有引入错误。提示:即使您只更改了一行代码,也需要进行回归测试以验证构建过程中没有出错(例如,库未正确打包导致模块失败)。

  • 更新代码可能意味着停机时间,这也会增加风险,因为如果更新失败,则始终存在this的风险

  • 在企业环境中,获得批准更新数据库通常要比代码更改快得多。

所有这些都需要花费时间/精力/金钱。请注意,在我看来,在数据库中保存参考数据或静态数据并不意味着性能受到影响,因为数据总是可以缓存。

答案 1 :(得分:1)

您的静态数组是将数据“硬编码”到程序中的一个示例,如果您永远不想想要更改它,那么这很好。

根据我的经验,对于您的用例,这不是永远是真的,并且将您的数据硬编码到您的来源将导致您经常被要求更新您认为的那些事情永远不会改变。

Protip:对项目经理和/或客户来说,没有什么是永恒不变的。

答案 2 :(得分:1)

我认为这只是归结为您认为将来如何使用数据库。如果将数据保留在数组中,然后又想创建另一个与此数据库交互的应用程序,则必须在两个代码库中维护角色/资源数据。但是,如果将角色/资源放入数据库,则数据库将成为其中的一个权限。

我建议将它们放入数据库中。您可以在启动时将表读入阵列,并且您将具有相同的性能优势和灵活性,以便其他应用程序能够获取此信息。

此外,当您/如果您开始编写用户管理系统时,通过加入表来显示用户的角色/资源比获取角色/资源ID更容易,并且必须查找数组中的漂亮名称。

答案 3 :(得分:1)

使用静态数组可以获得性能,考虑到您不需要一直访问数据库,但安全性比性能更重要,因此我建议您对数据库中的权限进行控制。

RBAC研究。

答案 4 :(得分:0)

被认为是静态的东西应该是静态的。那就是如果你真的认为它们是静态的。

但我建议使用类常量而不是静态数组值。