数据库设计,数据创建人有可能是用户,也有可能是管理员怎么设计最好?
比如编辑可以从管理后台发布文章,用户也可以从前台发布文章,除了拆分成两个字段比如user_id、admin_id之外还有什么好办法?
我想过用一个有符号位user_id来储存,正数是用户,负数是后台用户,但是这会导致两个问题:
1、无符号位用户ID可能过大,超过这个有符号位user_id最大值,除非用户表id用int,这个文章表user_id用bigint。
2、比如显示文章列表时,要关联显示发布人信息,如果放在一个字段,正数查user表,负数查admin_user表,实现比较麻烦。
有无老哥有更佳方案。
AI给的三个方案是加个role字段区分;user_id,admin_id两个字段区分;查询时拆开查询;基本等于没说
没搞懂为什么要用正数,负数去表示是管理员还是普通用户,请使用多态关联解决你这个问题
这不就是典型的一对一的多态关联吗
article表里加个owner_type,owner_id
owner_type写入对应的模型名称,owner_id写入对应模型的主键id
这个不就是角色身份嘛?加个角色表
就这种需求,第一考虑就是不要用多态或者类多态,因为这玩意儿具有传染性。
最好的解决办法就是为后台用户创建一个前台用户。
主体不是文章吗,is_admin 0,1不就完了。你要是关联查询,像上面老哥说的最好给管理员也创建个前台用户,或者在后台做关联,比如a管理员绑定自己的前台账号122,然后存122。不然你以后前台显示的时候,肯定会有点击作者头像跳转到空间的需求吧,那你搞个后台账号,他空间怎么办,发布列表怎么办,查起来太麻烦了。还有正负太骚操作了。。。从来没看过这么做的。。。
建议通过 RBAC 授权,你可以安装一个 laravel-admin 项目,研究学习他的授权管理
最简单的感觉就是用户表加状态(用户(默认),管理员),后台操作管理员时同步更改用户表信息,然后前端文章完全使用用户表来关联展示信息
方案一:
统一users表。如果你的admin_users里的用户数据量不大,完全可以把admin_users和users一起合并起来,同一个表操作就不需要区分去查询不同的表,如果你想区分是否是管理员和用户,那么用户表加一个标识就行。这是最简单的处理方式;
方案二:
如果是想着分开,那就使用多态。文章表里新增两个字段:
user_type
和user_id
,user_type
用来区分用户类型,里面的值是字符串类型,用来存放指向的用户的模型,例如:App\Models\User
和App\Models\AdminUser
。示例代码
方案1、同一个表,加一个标识区分是否是后台用户 方案2、加一个关系表。客户端用户当做会员,后台用户就是用户,后台用户可以绑定客户端会员。
注册一个内部用户,新建一个管理员及内部用户绑定表,如果是管理员从后台发文章,user_id取绑定表中对应管理员关联的内部用户就行了
前台显示的时候还在意是哪个后台账户发布的吗?直接显示本站编辑、网站编辑等等
用两个字段
admin_id表示后台谁操作
user_id可以是用户的账号和后台作者的账号(一个后台操作员可能对应多个账号)