一个python+mysql小项目字段设计的思考

我这个需求的运算量非常小,不是个值得钻牛角尖问题,怎么来都行,但我还是想思考一下类似的情况下正确的做法是什么。

user表里是有身份证号码的,那么性别是应该独立存一个字段,还是每次通过身份证号去算呢?类似的还有出生日期。

也就是说这种该通过增加存储负担来减轻处理负担,还是说能算出来的都不要存?

我的想法是:
性别、生日和身份证号码是独立属性,原则上大多数能推算不代表一定能推算。现实中大量的身份证生日不是真实身份。再比如
生日是农历还是公历?如果按身份证生日去算,有很大概率其实不是用户想要的结果。


数据的原子性只是一个原则,是因为冗余数据同步起来会有各种各样的麻烦。但比起效率来说,这些都是鸡毛蒜皮。典型的场景就是多级缓存,存那么多份,各种额外的同步和更新逻辑,不就是为了提高效率嘛。

再说应用场景:
按生日筛选和按性别筛选在很多场景中是常用操作。每次去实时的算是不能接受的。mysql的索引也就没法做了。一个没有索引的数据库。。。大概不能超过1k行吧。。。

虽然不能说写在where里的字段都要建立索引,但大多数作为条件的字段都可能有索引。主要还是性价比的衡量。因为索引也不是越多越好,太多索引会占用磁盘空间,并且明显降低增删改的效率。一个字段可能只是偶尔用到,可以不建索引。一个字段可能从来不会单独使用,可以不建独立索引。mysql的话有explain命令可以用来分析每条语句使用索引情况和执行效率。

常见的玩法是
Users
userid
username
Devices
deviceid
owner 指向Users.userid

Users每一行记录有一个主键id,用来标识一个用户,用户名根本只是一个普通属性而已,可能重复,可能更改,可能为空,可能非常大非常长。Devices表要关联的最好是稳定唯一消耗少的字段(userid),而不是选个不稳定不唯一消耗大的字段。至于直接再存一次姓名字符串,更不可取了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值