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

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

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


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

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