数据库建立冗余字段的原则

冗余字段,是设计数据的时候常用的一种手段。优点是,可以在很大程度上避免数据库的关联查询,不使用join提升查询速度。缺点是,数据一致性维护成本高,需要维护冗余字段的一致性。
数据库model设计,致力于不要建立冗余字段。因为维持数据一致性是一个big problem。
但是作为操作日志,记录,历史这些,是需要冗余的。其实,在这里已经不是冗余了,只是记录了当时的信息。
比如下面的operator_name,操作员的姓名。一般user_id是不会变的,但user_name可能会随时公司人事变动而调整。
    approve = models.CharField(choices=APPROVED_STATUS, verbose_name='审核状态', max_length=20,
                               default=APPROVED_STATUS[0][0])
    approve_value = models.CharField(choices=APPROVED_STATUS, verbose_name='审核状态', max_length=20,
                                     default=APPROVED_STATUS[0][1])
    comments = models.CharField(max_length=100, verbose_name='审核备注', null=True)
    operator_id = models.CharField(max_length=30, verbose_name='操作员id', null=True)
    operator_name = models.CharField(max_length=50, verbose_name='操作员名字(冗余)', default='')
交易快照场景:交易场景大部分是数据快照,而不是冗余,用户下单时候的用户名、地址、商品名称、商品描述等,若采用关联,商品在下单后发生了更新的话再去关联查询就会导致和用户操作时的数据不一致,从而产生纠纷。这其实也不是冗余,而是当时交易的历史记录。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

草根大哥

进军大神程序员路上,谢谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值