V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zhoudaiyu
V2EX  ›  数据库

一个用 Django 写公司内部系统的运维狗怎么能提高数据的设计水平?

  •  
  •   zhoudaiyu · 2020-06-06 21:46:58 +08:00 via iPhone · 2067 次点击
    这是一个创建于 1412 天前的主题,其中的信息可能已经有所发展或是发生改变。
    经常设计一些只有 2 3 个字段的小表,然后弄一堆外键和多对多的表,导致即便数据量不大也查询比较慢。还有用一些反模式,比如一个短信发送表,把一次给一堆人发送的结果存成一条记录,然后有个发给谁的字段存了好几个人手机号,再用逗号分隔,导致查发给了谁只能模糊查询,也是慢。甚至有一些报表需要使用正则查数据库,要么就从数据库都拿出然后在 Django 里做正则匹配。然而发现这些问题都是得过段时间重新审视表设计,或是遇到一些需求才能发现。怎么才能在最初设计的时候就能规避一些问题呢?
    10 条回复    2020-06-07 11:30:44 +08:00
    rim99
        1
    rim99  
       2020-06-06 22:04:36 +08:00
    敏捷嘛,不同的重构就是
    rim99
        2
    rim99  
       2020-06-06 22:05:03 +08:00
    不停,打错了
    zhoudaiyu
        3
    zhoudaiyu  
    OP
       2020-06-06 22:06:34 +08:00 via iPhone
    @rim99 重构有时候会影响报表数据
    MOONLIGHTT
        4
    MOONLIGHTT  
       2020-06-06 22:12:49 +08:00
    数据库设计有范式的,一般能够达到 3NF 性能就可以了(课本上是这么说的)。。

    对于一对多的记录的话,postgresql 好像可以存 json 的数据,也能查询 jso 。
    chenxytw
        5
    chenxytw  
       2020-06-06 22:17:44 +08:00
    在最初设计时没法规避没有遇到过的问题...
    所以需要刷经验...
    实在自己涨经验慢的话,多看看别人的博客 /文章吧 0 0
    zhoudaiyu
        6
    zhoudaiyu  
    OP
       2020-06-06 22:19:43 +08:00 via iPhone
    @chenxytw 最近看了 SQL 反模式,感觉能稍微少点坑,但还是有些坑和业务关系更大,不太好从书本上学到
    zhoudaiyu
        7
    zhoudaiyu  
    OP
       2020-06-06 22:20:11 +08:00 via iPhone
    @MOONLIGHTT 我们用的 mysql 5.6 好像对 json 支持一般
    Govn
        8
    Govn  
       2020-06-06 22:34:14 +08:00
    mark 一下 我现在也有这个问题 我现在的解决方法就是写 sql 。
    HashV2
        9
    HashV2  
       2020-06-07 02:12:47 +08:00
    @MOONLIGHTT 也没必要完全遵守第三范式吧,有时候一些冗余换查询效率也是很有必要的
    37Y37
        10
    37Y37  
       2020-06-07 11:30:44 +08:00
    多写就好了,每次发现之前设计的不合理就改掉记录下来,下次设计就会更合理一点,长此以往就设计合理了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3526 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 04:54 · PVG 12:54 · LAX 21:54 · JFK 00:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.