我想保存单个用户和用户组的权限。在我的mysql数据库中,我有一个权限表,我在其中存储权限名称和权限ID。我有一个用户表,我存储了一个用户名,密码等,其中还包含一个id,我有一个组表,用于存储组名和组ID。
现在最有效的选择是什么?制作2个表,一个包含用户权限,一个包含组权限,如下所示:
int group id | int permission id
int user id | int permission id
或者如果有这样一个表会更好;
int id | int permission id | enum('user','group')
答案 0 :(得分:2)
我建议使用两张桌子。
首先,您可以通过检查第一个表的组权限以及是否没有组权限来搜索用户权限来缩短搜索时间。
其次,其他程序员会更容易理解。
答案 1 :(得分:1)
我怀疑你的两种方法之间会有很大的性能差异;但是,与所有性能和优化问题一样,感觉和猜测无关紧要,只有异形结果才有意义。哪一个更有效取决于您的数据,数据库,访问模式以及您的上下文中“有效”意味着什么(空间?时间?开发人员的努力?最终的货币成本?)。
也就是说,使用两个表是一个更好的结构,因为它允许您将组权限表中的外键返回到组表,将用户权限表中的外键返回到用户表。即使在一个表中它更快,我仍然会选择两个:数据完整性比浪费几μs处理器时间更重要,我没有看到快速访问不可靠或损坏数据的重点。
答案 2 :(得分:0)
第一种方式看起来更节省时间,第二种方式看起来更节省空间。对于唯一索引的速度,在第二种情况下,您必须在第1和第3个字段上编制索引。
<小时/> IMO,再考虑一下,第二种方式的任何潜在收益都不值得。可能有一些第三种方式,但是你发布的第一种方式是优越的。简单,干净,快速。