1

我有一个数据结构类型的问题,我也不知道答案。本质上,我有四个权限控件(isSecret、canEdit、isActive 和 hasPage),我需要为许多不同的表存储它们。

我有两个解决方案,但我不确定哪个是最好的性能:

  1. 将每个权限存储为每个表上的单独行。对我来说,这似乎是查询时访问数据的最快方式,但因为 PHP 将在 90% 的时间处理权限,所以它似乎效率低下。

  2. 有一个权限列,其中权限名称(sec、edt、act、has)存储为逗号分隔的字符串。这使我将来可以灵活地引入新的/不同的权限,在我的数据库中看起来很整洁,并且在 PHP 和 mySQL 中都易于使用(我可以使用 IN 查找查询并分解字符串并将其作为数组使用PHP)。此列将是 40 个字符的 varchar,允许我存储多达 10 个不同的权限(3 个字母和一个逗号)

选项 2 是我的首选解决方案,直到我意识到 IN 命令可能会占用大量资源。我认为在我的表中的每一行上使用 IN 命令可能会影响性能,试图寻找不活动的页面来过滤掉。为了解决这个问题,我可以只获取列中的每一行,然后使用 PHP 过滤掉这些行,但同样,我不确定这会有多有效。

理想情况下,我认为在我的解决方案中,子列将是最好的解决方案(主权限列和我的每个权限的这 4 个子列),然后可以轻松查询(即,其中 permission.canEdit = 1)

结果最终将使用 memcache 缓存(当我能够弄清楚如何使用它以及清除它的有效方法时),但我不想依赖这个。

4

1 回答 1

0

我认为SET将是您所需要的

于 2013-01-04T20:13:52.277 回答