在MultiToMulti数据库中使用ID或名称进行SQL查询

时间:2015-07-05 03:58:19

标签: php mysql

我得到了一张表(SQL),其中包含许多权限,他们都拥有 ID 名称 我得到了一个带有两列的第二个表,一个列有一个角色的ID,另一个列包含该特权的id。 (多对多关系)

因此,我的脚本知道用户具有什么角色,并且需要检查用户是否有权执行操作。

在我的脚本(PHP)中,它使用参数 $ privilege 调用我的 access_check 函数,然后检查数据库中是否存在包含正确权限ID的匹配行角色ID。

最好的方法是什么:

As Parameter使用权限名称,然后在id中查找权限(在脚本中对我来说更具可读性)

OR

直接使用ID(数据库查询越来越少需要在某处安全的数据)

1 个答案:

答案 0 :(得分:1)

这取决于您的设置。一些想法/想法/问题:

1)如果您需要跟踪的权限数量很少且不会随时间发生变化,您可以在PHP脚本中创建具有适当名称的常量,并使用这些常量而不是权限ID。这样做的缺点是您需要从脚本中硬编码的数据库中重复信息。但它快速可读。

2)为什么不在包含名称的权限表中使用INNER JOIN?这样,您可以直接在WHERE子句中使用该名称。这种方法的优点是您不需要在我们的PHP代码中重复任何数据。如果你正确设置索引,那么查询应该足够快,因为INNER JOINS确实在mysql中得到了很好的优化。

3)为什么你的脚本中有用户的角色名而不是角色id?同样适用于特权。为什么在检查例程中根本不需要这些名称。我认为用户应该具有角色ID,并且角色id绑定到权限表中的权限。这些实体的名称在您的脚本中发挥作用?

我希望这可以帮助您正确设计代码。