Php 我应该将访问控制列表序列化为json表还是数据库表

Php 我应该将访问控制列表序列化为json表还是数据库表,php,mysql,json,Php,Mysql,Json,我一直在研究创建一个访问控制列表,我发现了一些东西。然而,我不确定其中一种方法是否极端过火,另一种方法是否过于简单 这就是: 现在,我如何设置它是因为在用户表中我有一个权限字段。此字段包含用户拥有的所有权限的JSON。我很好奇,想知道是否有更好的方法来实现这一点,我发现结构化数据库对角色和权限使用单独的表 e、 g 这是非常基本的,但是基本的想法 我的问题是,哪种方法更好。tables方法似乎有点繁重,需要连接和获取权限的一切。但是,当我查找用户时,我可以拉出JSON字段并缓存它。。。还是我缺少

我一直在研究创建一个访问控制列表,我发现了一些东西。然而,我不确定其中一种方法是否极端过火,另一种方法是否过于简单

这就是:

现在,我如何设置它是因为在用户表中我有一个
权限
字段。此字段包含用户拥有的所有权限的JSON。我很好奇,想知道是否有更好的方法来实现这一点,我发现结构化数据库对角色和权限使用单独的表

e、 g

这是非常基本的,但是基本的想法


我的问题是,哪种方法更好。tables方法似乎有点繁重,需要连接和获取权限的一切。但是,当我查找用户时,我可以拉出JSON字段并缓存它。。。还是我缺少一些基本的东西?

你的JSON方式看起来像Wordpress序列化,WP使用序列化来存储选项,看看这篇文章,举个简单的例子:

但它用于IMHO或多或少不相关的选项、不需要过滤的选项或其他任何选项,唯一的功能是提供特定功能的配置。让我们说一些不重要的事情


权限和角色是我认为对任何应用都至关重要的东西,最好的方法是使用标准表方法。您可能需要新的插入,这会更容易,或者查询谁拥有某些权限,这就是关系表的魔力。

在使用rational数据库时,您应该使用本机表代替非本机数据结构。在州际公路上骑自行车是一种选择,但这是最好的选择吗

效率
现代数据库服务器能够缓存重复查询的结果,那么,既然缓存已经为您完成,为什么还要浪费应用程序中的资源呢。至少大多数情况下,提供了一个超时缓存,在该缓存中,如果相隔片刻生成相同的查询,则从内存返回相同的结果(假设结果的值没有被更改),而不需要读取数据库

字段集越大,JSON字符串在文件系统上占用的空间就越大,解析数据的速度就越慢,缓存结果消耗的内存也就越多。使用表,字段集将大大减少文件系统上的资源消耗,并使您能够请求此时所需的值,这些值已按应用程序理解的方式格式化。其中,与JSON一样,您检索的字符串仍然需要更多的操作才能理解,其中不仅包含您当时需要的值,还可能包含许多您不需要的值

可扩展性
对于存储的JSON字符串,如果您希望删除一个不再需要的字段或添加一个需要的字段,则必须花费相当多的处理能力来调整每个项目的数据集。其中,与表一样,这可以通过一个简短的查询命令来完成。每次服务器遇到一个字段应该被删除或缺少必填字段的项时,该项的字段都会在内存中进行调整,并计划在批处理文件系统写入时进行更新

--


您表示担心连接速度慢/成本高,但假设您当时只从需要的表中请求所需的数据,则与备选方案相比,来自连接的值应该非常小。

我更喜欢标准化表IMHO。因为这主要是基于意见的,我将投入我的两分钱:数据库表。正确地为列编制索引,您的联接就不会成为问题。好吧,那么如果我想向定义角色之外的用户添加个人权限,该怎么办呢。我需要创建另一个表并将所有内容连接在一起吗?这会导致更大的开销吗?若基于权限,您将创建具有特定权限的新行,若基于角色,您也必须创建特定角色。从来没有新桌子。
role
-------------
id | name


permissions
-----------------
id | role_id | name


user_role
---------------
user_id | role_id