php - 用户角色数据库架构设计

标签 php mysql sql postgresql scalability

我正在考虑涉及用户和用户角色的架构设计,但我不确定什么是更好的路线。

选项 1

创建三张表,一张包含用户信息,一张包含角色信息,一张包含用户角色关系。

users {
    u_id,
    etc
}

roles {
   r_id,
   r_name,
   etc
}

user_roles {
   u_idm
   r_id
}

选项 2

创建两张表,一张包含用户信息,另一张包含角色、角色信息和关系信息。

users {
    u_id,
    etc
}

roles {
   r_id,
   u_id,
   r_name,
   etc
}

选项 1 更强大,但需要额外的联接。选项 2 将需要一个额外的主键,但只会是一个连接。如果我更改了角色名称,则使用选项进行更新将需要更长的时间,但我不认为更新会很频繁。

对于可扩展的解决方案,哪一个更好?我的失踪还有哪些其他见解?这是针对 mysql 和 postgresql 解决方案。

最佳答案

选项 1。 如果每个角色只有一个用户可以拥有,那么角色有什么用呢? 如果您有 100 个注册用户,则“注册用户”将有 100 个重复定义。

“etc”越多,您的数据库就会越大。

拥有如此多的重复项会减慢数据库速度,即使少一个连接,最终速度也会慢很多。

如果您运行大量基于角色的查询和 relly eel,就像您需要一个像选项二中的数据库一样,您仍然可以创建一个 View 并让数据库缓存它,但我怀疑这对您有任何好处。

关于php - 用户角色数据库架构设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9316478/

相关文章:

php - PHP根据列条件处理MySQL查询

sql - 我可以在 SQL Server 中的添加列语句中创建命名默认约束吗?

mysql - 站点层次结构的邻接列表模型,如何按此特定顺序检索所有页面?

php - 多个 IF 语句条件

php - MySQL查询忽略大写

php - Laravel : htaccess is ignored on homestead?

javascript - 将可选数组从 PHP 传递到 jQuery

php - 我如何使用 php 从 sql 查询创建一个 csv 文件

java - 设计数据库自动完成功能的最佳方法

sql - 按字符降序显示数据 - postgresql