数据库设计,数据创建人有可能是用户,也有可能是管理员怎么设计最好?

比如编辑可以从管理后台发布文章,用户也可以从前台发布文章,除了拆分成两个字段比如 user_id、admin_id 之外还有什么好办法?

我想过用一个有符号位 user_id 来储存,正数是用户,负数是后台用户,但是这会导致两个问题:
1、无符号位用户 ID 可能过大,超过这个有符号位 user_id 最大值,除非用户表 id 用 int,这个文章表 user_id 用 bigint。
2、比如显示文章列表时,要关联显示发布人信息,如果放在一个字段,正数查 user 表,负数查 admin_user 表,实现比较麻烦。

有无老哥有更佳方案。

:blush: wink
附言 1  ·  3个月前

AI 给的三个方案是加个 role 字段区分;user_id,admin_id 两个字段区分;查询时拆开查询;基本等于没说

唐章明
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 14

没搞懂为什么要用正数,负数去表示是管理员还是普通用户,请使用多态关联解决你这个问题

3个月前 评论

这不就是典型的一对一的多态关联吗
article 表里加个 owner_type,owner_id
owner_type 写入对应的模型名称,owner_id 写入对应模型的主键 id

3个月前 评论

这个不就是角色身份嘛?加个角色表

3个月前 评论

就这种需求,第一考虑就是不要用多态或者类多态,因为这玩意儿具有传染性。

最好的解决办法就是为后台用户创建一个前台用户。

3个月前 评论
欧皇降临 3个月前

主体不是文章吗,is_admin 0,1 不就完了。你要是关联查询,像上面老哥说的最好给管理员也创建个前台用户,或者在后台做关联,比如 a 管理员绑定自己的前台账号 122,然后存 122。不然你以后前台显示的时候,肯定会有点击作者头像跳转到空间的需求吧,那你搞个后台账号,他空间怎么办,发布列表怎么办,查起来太麻烦了。还有正负太骚操作了。。。从来没看过这么做的。。。

3个月前 评论
唐章明 (楼主) 3个月前

建议通过 RBAC 授权,你可以安装一个 laravel-admin 项目,研究学习他的授权管理

3个月前 评论

最简单的感觉就是用户表加状态(用户(默认),管理员),后台操作管理员时同步更改用户表信息,然后前端文章完全使用用户表来关联展示信息

3个月前 评论

方案一:

统一 users 表。如果你的 admin_users 里的用户数据量不大,完全可以把 admin_users 和 users 一起合并起来,同一个表操作就不需要区分去查询不同的表,如果你想区分是否是管理员和用户,那么用户表加一个标识就行。这是最简单的处理方式;

方案二:

如果是想着分开,那就使用多态。文章表里新增两个字段:user_typeuser_iduser_type 用来区分用户类型,里面的值是字符串类型,用来存放指向的用户的模型,例如:App\Models\UserApp\Models\AdminUser

示例代码

// 在 Post.php 模型中
public function user()
{
    return $this->morphTo();
}

// 在 User.php 模型中
public function posts()
{
    return $this->morphMany(Post::class, 'user');
}

// 在 AdminUser.php 模型中
public function posts()
{
    return $this->morphMany(Post::class, 'user');
}

// 查询,user_type写好模型,查询会自动关联不同的User
$posts = Post::with('user')->get();
3个月前 评论

方案 1、同一个表,加一个标识区分是否是后台用户 方案 2、加一个关系表。客户端用户当做会员,后台用户就是用户,后台用户可以绑定客户端会员。

3个月前 评论

注册一个内部用户,新建一个管理员及内部用户绑定表,如果是管理员从后台发文章,user_id 取绑定表中对应管理员关联的内部用户就行了

3个月前 评论

前台显示的时候还在意是哪个后台账户发布的吗?直接显示本站编辑、网站编辑等等

3个月前 评论

用两个字段
admin_id 表示后台谁操作
user_id 可以是用户的账号和后台作者的账号 (一个后台操作员可能对应多个账号)

3个月前 评论