暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

数据库-测灵魂表的设计

小L编程 2021-06-28
842
这是我第一次接触到了表的设计,就像是一直被爸爸妈妈搀扶着走路的孩子,一下子让他自己走,难免会摔跤。以前,总拿着已经设计好的数据库表来实现,总让自己有点飘飘然了。好吧,下面开展对表设计开始讲述吧,会很青涩,但是还是想自己写一下,加深一下理解,听说大佬都是会写文章的,我这不就得跟上大佬的节奏。



功能需求
测灵魂
基本需求:
  • 测试题用于对于用户进行分类,每次提交答案后更新用户属性

  • 测试题在后台进行维护(java代码录入进数据表中)

  • 测试题测试完后产生结果页可以进行分享

  • 测试题为顺序回答,回答初级题解锁下一级问题

  • 点击锁定问题 显示提示 前先回答上一级问题

功能介绍:

  • 问卷列表:展示所有的文卷(低级、中级、高级)

  • 提交问卷答案

    • 根据提交的答案,和问题的预设评分,统计总分

    • 根据总分,计算出人格类型(更新用户属性)

    • 记录评分报告(低级问答,总分,用户的任何类型。。。)

  • 查看问卷的报告

  还有yml的接口规范,这里就不展示了,毕竟现在的笔记只是写给自己看的,不幸看到的读者请多多包容,原谅一个菜鸡的自述


第一次拿到这样的需求,真的是头很麻,不知从哪入手,只能从常规步骤分析
  • 原型分析

  • 需求分析

  • 数据库分析

  • 接口规范

  • 编写:controller->service->dao

原型分析

点击app测灵魂按钮,每个用户都能看到三个问卷的展示,第一个问卷是打开的,其他的是锁住的,只有完成了第一个问卷的测试,第二个才会打开,依次类似。开始问卷填写,可以选择选项回答问题,提交问卷,会根据测试的分数展示测试结果以及推荐与你相似性格特征的用户。完成第一个测试,第二个问卷解锁,接着与上面一致。

思考

数据库的设置就是把问卷、题目、答案、分数、推理出性格,最后展示给用户的过程。
问卷测试问卷表tb_questionnair


    CREATE TABLE tb_questionnair(
    id BIGINT(20) NOT NULL AUTO_INCREMENT,
    `level` INT(1) DEFAULT NULL COMMENT '问卷等级:1初级,2中级,3高级',
    `name` VARCHAR(20) NOT NULL COMMENT '问卷名称',
    cover VARCHAR(100) NOT NULL COMMENT '封面地址',
    star INT(1) NOT NULL COMMENT '星级',
    created DATETIME DEFAULT NULL,
    `update` DATETIME DEFAULT NULL,
    PRIMARY KEY (`id`),
    KEY `index_level` (`level`)
    )ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='灵魂测试问卷';
    记录问卷表的所有属性:问卷编号、问卷等级、问卷名称、封面地址、星级

    问卷题目表
      CREATE TABLE tb_soul_Question(
      `id` BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT 'id',
      `question` VARCHAR(100) NOT NULL,
      `questionnair` TINYINT NOT NULL
      )ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT '问卷题目表';
      问卷题目表记录题目的属性,一个问卷有几个题目,记录所有问卷的题目

      问卷测试表和题目表的关系

      题目选项表
        CREATE TABLE tb_question_options(
        id BIGINT(20) PRIMARY KEY AUTO_INCREMENT,
        `content` VARCHAR(100) NOT NULL COMMENT '选项内容',
        `media` VARCHAR(100),
        `question_id` BIGINT(20) NOT NULL COMMENT '题目的id',
        `score` TINYINT ,
        `created` DATETIME DEFAULT NULL,
        `update` DATETIME DEFAULT NULL
        )ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT '问题选项表';
        当然每个题目的选项也是需要被记录到表中的,表中的每个选项都要与题目相对应,包括每个选项的得分,方便后面进行计算问卷的总分

        问卷测试表、题目表、选项表的关系

        用户对应问卷锁表
          CREATE TABLE tb_question_user_lock(
          id BIGINT(20) PRIMARY KEY AUTO_INCREMENT,
          `user_id` BIGINT(20) COMMENT '用户id',
          questionnair_id TINYINT(1) COMMENT '问卷id',
          `is_lock` TINYINT(1) COMMENT '锁状态',
          `created` DATETIME DEFAULT NULL,
          `update` DATETIME DEFAULT NULL,
          KEY index_user_id (user_id)
          )ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT '用户对应问卷锁表';

          因为每一个用户都有三张表,这里记录的是所有用户的三种表的锁状态,如果用户1提交了问卷了,那么questionnair_id=2这行的is_lock会变成0,只有完成上一个问卷,下一个问卷才会解锁。因为用户数的设计应该是很大的用户量,所以会造成这个表的数据量过大,可以优化存储的方案,存储在mongdb,mongodb适合存储数据量大的数据。

          灵魂测试结果表
            CREATE TABLE tb_question_result(
            id BIGINT(20) PRIMARY KEY AUTO_INCREMENT,
            questionnaire_id TINYINT(1) NOT NULL,
            scope VARCHAR(20),
            cover VARCHAR(200),
            content VARCHAR(200),
            `created` DATETIME DEFAULT NULL,
            `update` DATETIME DEFAULT NULL,
            KEY index_questionnaired_id (questionnaire_id)
            )ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT '测试结果表';

            灵魂测试结果表,是用于记录用户测试的结果,通过用户填写问卷的分数来得到用户的性格类型

            总结:
            表的设计真的是错综复杂,能掌握好表的设计,能力会发生阶段性的提高。加油
            文章转载自小L编程,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

            评论