V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
clockwork1122
V2EX  ›  问与答

自定义字段的功能数据库是怎么设计的呢?

  •  1
     
  •   clockwork1122 · 78 天前 · 874 次点击
    这是一个创建于 78 天前的主题,其中的信息可能已经有所发展或是发生改变。
    业务中开发了个设施巡检系统,功能只是记录对种类不同的设备进行记录。例如消防拴可能 5 个属性,然后闸门是 7 个属性。如果描述不清楚,同样的需求在 OA 平台、问卷系统、低代码平台很常有,想了解下一般实现方案。


    目前想到有几种方案:
    1. 一种类型一个数据表
    2. 一个数量极大的数据表,使用 type 区分,另外一张表存每个 type 具体的属性
    3. 一个数据表,使用 mysql8 的 json 类型
    第 1 条附言  ·  77 天前
    很感谢各位老哥的回复,好好研究大家的回复,学得不少,汇总下情况:
    1. 使用 mysql 搭配 json 格式
    2. 使用 mysql 搭配 EVA 设计
    3. 使用 mongodb
    19 条回复    2022-11-19 16:42:09 +08:00
    tool2d
        1
    tool2d  
       78 天前
    我看到过别人设计的 sql 系统,都是用单独一个表格,设计可变动的字段。虽然我个人觉得动态改改表结构,也没啥问题来着。
    Morii
        2
    Morii  
       78 天前
    这属于打 Tag 了吧?
    K7TrSJryPNjj
        3
    K7TrSJryPNjj  
       78 天前
    EAV
    ztxcccc
        4
    ztxcccc  
       78 天前
    想想 CMS 是如何让用户定制字段的
    clockwork1122
        5
    clockwork1122  
    OP
       78 天前
    @tool2d 动态改表结构意味着需要改代码,例如是做 OA 平台,有 10 个公司,每个公司都有自己的模版,就太累了
    clockwork1122
        6
    clockwork1122  
    OP
       78 天前
    @ztxcccc 没接触过 CMS 系统,是我认识不准确吗,内容发布一般就标题、内容、之类的,字段还比较固定吧,觉得问卷调查系统更贴合需求
    clockwork1122
        7
    clockwork1122  
    OP
       78 天前
    @Morii 不是吧
    clockwork1122
        8
    clockwork1122  
    OP
       78 天前
    @K7TrSJryPNjj 谢老哥,我查查
    RoninZc
        9
    RoninZc  
       78 天前
    http://jintang.zone/2021/08/31/%e5%8a%a8%e6%80%81%e5%ad%97%e6%ae%b5%e5%ad%98%e5%82%a8%e6%96%b9%e6%a1%88%e5%af%b9%e6%af%94.html
    a546016387
        10
    a546016387  
       78 天前
    @RoninZc #9 老哥博客是啥主题,挺好看的
    clockwork1122
        11
    clockwork1122  
    OP
       78 天前
    @RoninZc 感谢老哥
    optional
        12
    optional  
       78 天前
    你的需求那么明确了(类型对应固定的字段集合),那显然 json 是最合适的。
    查询的时候,直接 type=? AND attrs->'?' == ? 就好(这里用 pg 的语法)
    zxfreedom
        13
    zxfreedom  
       78 天前
    同楼上,可以用 json 试试
    xiaomada
        14
    xiaomada  
       78 天前
    用 Nosql ,比如 MongoDB 就是专门搞这种的,每条数据属性都可以不同
    wbrobot
        15
    wbrobot  
       78 天前
    @tool2d
    直接用开源的无头 cms 啊, 如 directus 以前是 php 后端,现在全 nodejs 了, 还有 strapi 等等
    或者类似的数据集管理库,如 supabase, 还有 go 开发的宣称单运行文件为特色的 pocketbase

    如果要自己开发,就参考开源实现,很多啊
    securityCoding
        16
    securityCoding  
       78 天前
    推荐用 mongo 之类的,用 mysql 纯属是找不自在
    flankerfc
        17
    flankerfc  
       78 天前
    你的类型有多少。mongodb 肯定可以解决,mongodb 本身就是 document 数据库,没有 schema ,性能也足够。但是你需要有一套成熟的 ORM 框架。还有如果用 mongodb 你也要考虑到和其他数据表的 relation 。如果你已经很熟悉 mysql 或者 psql 了,用 json 类型其实也可以。或者就是单独一个表来保存扩展属性( key/value 的形式),这种就是读取数据时,要 join 联查出来
    RoninZc
        18
    RoninZc  
       77 天前
    @a546016387 @clockwork1122 网上冲浪找的博客,主题是啥我也不知道😂
    hperfect
        19
    hperfect  
       74 天前
    postgresql 的表继承方案也可以了解一下, 我们公司用的就是这种方案
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   实用小工具   ·   372 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 19:33 · PVG 03:33 · LAX 11:33 · JFK 14:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.