2013-01-04 81 views
1

我有一个数据结构类型的问题,我并不真的知道答案。本质上,我有四个权限控制(isSecret,canEdit,isActive和hasPage),我需要将其存储在多个不同的表中。存储mysql行的访问权限

我心里有两种解决方案,但我不知道它是明智的最佳性能:

  1. 商店每个权限为每个表单独一行。对我来说,这似乎是在查询时访问数据的最快方式,但是由于PHP将在90%的时间内处理权限,因此效率不高。

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

方案2是我的首选解决方案,直到我意识到,命令可能会占用大量资源。我认为可能会在我的表中的每一行使用IN命令尝试查找非活动页面以进行过滤时性能下降。为了解决这个问题,我可以只读取列中的每一行,然后用PHP过滤出行,但我不确定这将会如何有效。

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

结果将最终使用memcache进行缓存(当我能够弄清楚如何使用它和清除它的有效方法),但我不想依赖于此。

+0

你可以存储一列,它是X位长,然后用[位运算符(http://php.net/manual/en/language.operators什么.bitwise.php),我找到了一个体面的教程/指导如何使用它们的权限[这里](http://www.php4every1.com/tutorials/create-permissions-using-bitwise-operators-in-php/ ) – Supericy

+0

你看过你选项2的ENUM列类型了吗?它比逗号分隔列表更有效地存储值,而且不必分割或连接。 –

+0

@Supericy完美谢谢!就是我以后的样子。 – Garion

回答

0

我觉得SETs会是你需要