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


when should I use a static array instead of a new table in my database?

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

对角色使用静态数组的想法是,我们不会一直创建新角色,因此数据不会一直更改。我对资源也有同样的看法,因为我认为资源是只有开发人员才应该处理的东西,因为它们与代码的关系比与数据的关系更大。你知道为什么使用静态数组而不是数据库表吗?何时/为什么?

将值硬编码到代码中的问题是,与数据库更改相比,代码更改的成本要高得多:

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

  • 更新代码可能意味着停机,这也增加了风险,因为如果更新失败,总是有这种的风险

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

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

您的静态数组是将数据"硬编码"到程序中的一个示例,如果您从未想要更改它,这是很好的。

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

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

我认为这可以归结为您认为未来将如何使用数据库。如果将数据保留在数组中,然后希望创建另一个与此数据库交互的应用程序,则必须开始在两个代码库中维护角色/资源数据。但是,如果您将角色/资源放入数据库中,那么数据库将是它们的唯一权限。

我建议将它们放入数据库中。您可以在启动时将表读取到阵列中,这样您就可以获得相同的性能优势和灵活性,让其他应用程序能够获得这些信息。

此外,当/如果您开始编写用户管理系统时,通过连接表来显示用户的角色/资源比返回角色/资源ID并在数组中查找漂亮的名称更容易。

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

RBAC研究。

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

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