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

在数据库中怎么设计可能存在也可能不存在的值和状态值

  •  
  •   TomVista · 2020-09-21 18:51:29 +08:00 · 796 次点击
    这是一个创建于 1306 天前的主题,其中的信息可能已经有所发展或是发生改变。
    if(type='type1'){
        a=''
        b=''
    }
    
    if(type='type2'){
        c=''
        d=[{
            e:'',
            f:''
            },
            ...
          ]
    }
    

    这里的 type 和 a b c d e f 怎么建表呢?

    {e,f}要不要建表

    5 条回复    2020-09-21 19:37:41 +08:00
    shakoon
        1
    shakoon  
       2020-09-21 19:21:44 +08:00   ❤️ 1
    把若干个子项用相同的分隔符拼成一个字段,使用的时候整体取出来再拆进数组里
    yumenawei
        2
    yumenawei  
       2020-09-21 19:24:00 +08:00   ❤️ 1
    哪些列需要经常被查询的吗?
    没有的话就放一个字段里呗。
    TomVista
        3
    TomVista  
    OP
       2020-09-21 19:34:34 +08:00
    @shakoon
    @yumenawei
    明白了,那 if else 这种呢?

    用一个字段 判断 哪几个字段有值, 建立 nullable 的字段吗? 然后在业务上用 if else 判断?
    tcfenix
        4
    tcfenix  
       2020-09-21 19:36:36 +08:00   ❤️ 1
    方案 A 数据库弄个 varchar(255) 或者干脆 text 的字段,把数据用 json encode 了然后放进去
    用的时候拿出来 decode 就好了

    方案 B 对于不确定字段的对象存储,mongoDB 之类的 nosql 会更适合, 如果你还有机会调头,而且未来这样的不确定字段对象会越来越多,那么你可以考虑是不是要做迁移了
    tcfenix
        5
    tcfenix  
       2020-09-21 19:37:41 +08:00   ❤️ 1
    @TomVista
    数据库加个字段类型,比如对应 type1 或者 type2
    然后根据不同的情况把字符串 decode 到不同的 model 里面
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1303 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 17:35 · PVG 01:35 · LAX 10:35 · JFK 13:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.