我需要写一个扣款模块,大致代码如下:
class DeductRecord(models.Model):
userid = models.IntegerField()
total_amount = models.IntegerField()
type = models.IntegerField(choices=...)
class DeductHistory(models.Model):
deduct_record = ForeignKey(DeductRecord)
amount = models.IntegerField()
DeductRecord记录了应扣款用户、金额和扣款的种类,DeductHistory记录了每天的扣款历史。DeductHistory通过deduct_record外键可以知道应该扣款的总数和种类。如果我想知道一个DeductHistory实例的种类,通过Django可以直接deduct_history_instant.deduct_record.type来获知,但是这样的话每次都需要进行两次数据库查询。
但是如果把DeductHistory改成如下:
class DeductHistory(models.Model):
deduct_record = ForeignKey(DeductRecord)
amount = models.IntegerField()
type = models.IntegerField(choices=...)
这样就方便了查询,直接用SQL也不用进行join了,但是我们就需要保证DeductHistory和DeductRecord中type值的一致性。
这两种实现哪种更好呢?