求教一个用户徽章数据表设计问题

1. 运行环境

golang gorm mysql

2. 问题描述?

用户表

type User struct {
    Id        int64
    Username  string
    Password  string
}

徽章表

type Badges struct {

    Name        string     //徽章名称
    Icon        string    //徽章图标
    Condition   string    //徽章条件
    IsAuto      uint8     //是否自动发放:1-是/0-否
    IsShow      uint8     //是否显示:1-是/0-否
    IsSystem    uint8     //是否系统徽章:1-是/0-否
}

3. 您期望得到的结果?

我的想法是 用户可以拥有多个徽章,但是只能佩戴一个,在首页就显示佩戴的那个徽章,而在个人主页就列出出用户拥有的所有徽章作为选择,请问我这个数据表要怎么设计呢?

萌新的问题可能有点傻,大佬们不要笑话哦

最佳答案

根据你的描述,用户和徽章这两个对象都有了,现在仅需要将用户和徽章关联起来,可以这样设计:

type UserBadgeRelate struct {
    UserId        int64
    BadgeId  int64
}

也可以这样

type UserBadgeRelate struct {
    UserId        int64
    BadgeIds    []int64
}

另外的,建议布尔字段使用 TINYINT,而不是UINT8,COMMENT 建议格式规范为 (是否自动发放。1:是,0:否)

2年前 评论
可莉 (楼主) 2年前
讨论数量: 6

拥有

拥有的徽章使用一个中间表 ,做多对多的关系映射。

CREATE TABLE user_badge
(
    user_id int,
    badge_id int
)

一条记录就是一个用户拥有徽章的记录。

佩戴

然后可以在用户表添加一个字段 badge_id 用于表示佩戴的徽章, 如果为 null 则表示没有佩戴。

2年前 评论
邢闯洋 2年前
巴啦啦

如果用户与徽章的关联关系,只需要存储它是否拥有这枚徽章,而不需要获得徽章的时间的话。可以将其存到位图,用户表记录佩戴的徽章id,仅一张徽章详情表就可以了。

2年前 评论
可莉 (楼主) 2年前

根据你的描述,用户和徽章这两个对象都有了,现在仅需要将用户和徽章关联起来,可以这样设计:

type UserBadgeRelate struct {
    UserId        int64
    BadgeId  int64
}

也可以这样

type UserBadgeRelate struct {
    UserId        int64
    BadgeIds    []int64
}

另外的,建议布尔字段使用 TINYINT,而不是UINT8,COMMENT 建议格式规范为 (是否自动发放。1:是,0:否)

2年前 评论
可莉 (楼主) 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!