xjcallen 2018-10-06 17:30:39 456次浏览 4条回复 0 0 0

很疑惑,为什么YII内置的RBAC功能的数据表要这么设计:

为什么他的表不用ID 用name去关联,比方说itemChildTable里面的 parent , child

这两个关联是用itemTable表里面的name去关联,我觉得使用ID关联更好,不知道YII这样设计的愿意在那?

  • 回复于 2018-10-07 19:18

    操作数据库方法有很多又不一定要rbac,

    1 条回复
    回复于 2018-10-08 09:20

    谢谢,你可能没明白我的意思

  • 回复于 2018-10-08 20:11

    字符串比数字更易读。

    我觉得使用ID关联更好

    能具体说一下好在哪里吗?

    3 条回复
    回复于 2018-10-11 09:13

    他们的功能其实是一样的,都能达到这个效果,但是字符串可能会很长,id的话就一个数字 ,个人感觉看起来用id更简洁。占用的存储也少,而且关联只需要使用id来关联,不管name怎么变都不影响,我觉得使用ID对数据维护上可能会好一点。

    回复于 2018-10-11 13:59

    字符串主键的目的是让代码易读,if (Yii::$app->user->can('updatePost')) {...} 的意思显而易见,你若把权限设计成 id 为主键,这个判断怎么写?写出来容易理解吗?

    一个应用内的权限数量有限且固定,这类信息比较适合使用字符串做主键。

    回复于 2018-10-12 08:08

    哦哦,你说的在理,理解了谢谢!

  • 回复于 2018-10-10 17:08

    感觉更多的作者个人习惯。用了很多的外键约束来保证同步更新(不支持外键约束的也做了特别的处理)。好处是在某些情况下不需要连表查询id对应的名称?或者楼上说的看起来更直观?

    1 条回复
    回复于 2018-10-11 09:15

    嗯嗯,使用id是需要多处理一下返回那一个字段还而已,但是我觉得使用id可能更自由一点,不会因为我name变了而关联不上

  • 回复于 2018-10-16 17:37

    drodata 说的感同身受,结合框架自带对权限的判断方法,用name是会更加人性化些

您需要登录后才可以回复。登录 | 立即注册