django中用外键还是非外键?建议尽量用外键。

标题:django中用外键还是非外键?建议尽量用外键。


    # order = models.ForeignKey(
    #     'oms.Order',
    #     related_name='order_history',
    #     on_delete=models.CASCADE,
    #     verbose_name='订单(FK)')
    order_id = models.CharField(max_length=20, null=True, verbose_name='订单id')


用外键方式,django会检查。比如不允许非法的或不存在此数据库中的order_id.
删除数据库中的记录时,也要先删除历史表,才能删除此order_id的记录。看起来麻烦,但实际上,这样有利于保证数据的一致性和正确性。
当然,django查表也更为方便。可以联合查表,prefetch()和select_related()都建立在FK外键的基础上。
我的建议是:在同一个django工程中,能够用外键的地方,坚决用外键。
如果一个entity_id,同时想表示多张表的外键,那怎么办呢?我的建议是定义不同的多个外键。

你可能感兴趣的:(django中用外键还是非外键?建议尽量用外键。)