V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
Rzon
V2EX  ›  MySQL

如何设计一个“动态”的数据库?

  •  2
     
  •   Rzon · 2018-12-14 15:20:42 +08:00 · 5100 次点击
    这是一个创建于 2196 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在做一个招聘平台的项目,但是想了两三天没想到如何设计表比较好。

    概念

    1、工种:职位、简历的分类

    2、职位:公司发布的职位招聘信息

    3、简历:个人发布的简历信息

    问题

    1.工种是未知的

    2.职位、简历的信息项都和“工种”挂钩,在填写职位和简历前,需要先选择工种,然后渲染要填写的条目

    3.职位、简历的列表信息、筛选条件、详情,和第二点一样都和工种有关

    4.同一个选项的可选值也和工种有关,比如“工作地点”,如果工种是外籍司机,那么工作地点是国家(中国、菲律宾...),如果是本地司机,其可选值为本地的地区(东区、西区、湾仔区) 。。。

    5.选项类型也各种各样:文本、下拉、单选、多选、级联。。。

    主要是不知道如何设计表,方便筛选和动态的表单,以及信息展示。。求帮助!

    第 1 条附言  ·  2018-12-14 16:59:00 +08:00
    感谢各位的回复!

    经过沟通,考虑到时间问题,决定每个工种都写死,所有修改都将更新版本。。。

    等项目完成后,再自行琢磨解决方法,再次感谢各位的回复! thx
    22 条回复    2018-12-15 00:50:11 +08:00
    Ediacaran
        1
    Ediacaran  
       2018-12-14 15:39:58 +08:00 via Android
    考虑 nosql?
    Rzon
        2
    Rzon  
    OP
       2018-12-14 15:43:44 +08:00
    @Ediacaran 谢谢回复,可以只用 MySQL 吗?没有使用过其他的,而且项目时间比较紧。
    neoblackcap
        3
    neoblackcap  
       2018-12-14 15:49:55 +08:00   ❤️ 1
    这个需要跟数据库是否动态完全没有关系,既然能列举这么多,为何不能将所有项枚举了?
    需要的只不过是前端如何展示罢,后端数据库没有那么复杂,找下产品经理,一起给业务建模,建表就水到渠成了
    zinplus
        4
    zinplus  
       2018-12-14 15:50:40 +08:00
    一楼说的对,可以考虑一下 redis。
    nosql 不复杂,半天就看完了。
    用 hash 存,很方便。
    liprais
        5
    liprais  
       2018-12-14 15:51:05 +08:00
    eav 模型了解一下
    xpresslink
        6
    xpresslink  
       2018-12-14 15:52:50 +08:00
    用 mongodb 啊,字段不用对齐。
    非要 sql 的,要动态只能设计成表设计成 id,key,value 三个列这种。把对象的属性(列)都变成行,这样就可以动态了。
    但是这么做行数变多数量级性能会有一定影响。
    lihongjie0209
        7
    lihongjie0209  
       2018-12-14 15:54:43 +08:00
    感觉你需要的是一个表单模版, 你可以有一个单独的表存放这个模版:



    比如:


    工种
    - 可选项 1
    - 可选项类型
    - 可选项值
    - 可选项 2
    - 可选项类型
    - 可选项值
    - 可选项 3
    - 可选项类型
    - 可选项值


    这个表单由系统管理员维护, 当用户选择相应的工种的时候把模版取出来渲染就好了
    lihongjie0209
        8
    lihongjie0209  
       2018-12-14 15:57:31 +08:00
    为什么有人一看到动态就想到了 NoSQL, 没有 NoSQL 之前的软件都没办法实现这个功能了吗?
    这是一个建模问题, 不是技术选型问题.
    模型建立好了, 至于用什么类型的数据库都没问题. 简单的点可以直接用文本储存配置文件来配置工种
    swulling
        9
    swulling  
       2018-12-14 16:00:16 +08:00 via iPhone
    你这个不是建一个工种表就完了么…

    这个是很传统的 SQL 场景啊,没必要 NOSQL
    binux
        10
    binux  
       2018-12-14 16:00:39 +08:00 via Android
    直接一个 blob 存模板就完了,你爱用什么格式用什么格式。
    所有不需要索引,查询筛选的内容不需要设计表。
    wowo243
        11
    wowo243  
       2018-12-14 16:03:24 +08:00
    建三个表然后联查?
    blodside
        12
    blodside  
       2018-12-14 16:14:08 +08:00
    写成 rdf 数据,用图数据库存,然后用 sparql 查。
    Rzon
        13
    Rzon  
    OP
       2018-12-14 16:14:53 +08:00
    @binux @lihongjie0209 感谢回复。不过选项的值可以作为筛选简历和职位的条件,存模板貌似行不通的感觉。
    而且选项应该可以让客户去新增,比如新加一个选项的可选值。我想做得比较“灵活”一些。
    lihongjie0209
        14
    lihongjie0209  
       2018-12-14 16:26:30 +08:00
    @Rzon 用户增加选项的时候更新一下模版不就可以了
    DavidNineRoc
        15
    DavidNineRoc  
       2018-12-14 16:56:32 +08:00
    工种表
    id name
    1 IT

    工种表表单表
    id name type helpe option is_filter
    1 name text 职业名字 true
    2 age number 年龄 false
    3 sex select 性别 ["1":"男", "2":"女"] false


    简历表
    id

    简历明细
    id work_id input_name input_value
    1 1 name david
    2 1 age 22
    3 1 sex 1
    关联表,把两张表关联好

    ****
    1.工种是未知的:
    * 直接增加工种表记录

    2.职位、简历的信息项都和“工种”挂钩,在填写职位和简历前,需要先选择工种,然后渲染要填写的条目
    * 通过工种表单表直接查询所有字段,然后渲染表单

    3.职位、简历的列表信息、筛选条件、详情,和第二点一样都和工种有关
    * 通过 is_filter 控制是否可筛选,然后渲染条件,查询的时候得到工种 id,然后查简历表明细表的字段匹配,

    4.同一个选项的可选值也和工种有关,比如“工作地点”,如果工种是外籍司机,那么工作地点是国家(中国、菲律宾...),如果是本地司机,其可选值为本地的地区(东区、西区、湾仔区) 。。。
    * 通过 option 字段预留

    5.选项类型也各种各样:文本、下拉、单选、多选、级联。。。
    * 通过 type 字段设置
    Rzon
        16
    Rzon  
    OP
       2018-12-14 16:59:45 +08:00
    @DavidNineRoc Thx,后续我再仔细桌面您的解答,非常感谢!
    ren2881971
        17
    ren2881971  
       2018-12-14 17:02:55 +08:00
    这不就是电子表单么。。。 每个工种下的表单信息都不一样 ,保存的信息也都不一样。
    liaoguiming
        18
    liaoguiming  
       2018-12-14 17:13:58 +08:00
    如果要用 MYSQL 建表的话 思路和电商里的商品属性类似

    A 工种表
    B 类目总表
    C 类目副表(不同的职业,简历对应的具体填写类目) 名称,填写方式(多选,单选,下拉,输入框等等)都可以维护
    D A 和 B 关系维护表(哪个工种对应了那些类目)

    仅供参考
    ihavecat
        19
    ihavecat  
       2018-12-14 17:23:46 +08:00
    多表 加关系表
    loveCoding
        20
    loveCoding  
       2018-12-14 17:25:38 +08:00
    建一个模板表吧 , 没那么复杂
    fortunezhang
        21
    fortunezhang  
       2018-12-14 17:26:28 +08:00
    不确定的或者会变化的,就新建一个表。然后主表存 id
    binux
        22
    binux  
       2018-12-15 00:50:11 +08:00 via Android
    @Rzon 你不会加 tag 吗
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2852 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 14:56 · PVG 22:56 · LAX 06:56 · JFK 09:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.