来自单个Django模型的多个db表

时间:2018-05-16 19:12:24

标签: python sql django

假设有某种汽车租赁/销售聚合器。它适用于许多服务提供商(为客户提供汽车)和客户自己。

Django为这种系统做模型的方法是这样的:

class Vendor(models.Model):
    name = models.CharField()

class Car(models.Model):
    vendor = models.ForeignKey(Vendor,
                               blank=False,
                               null=False,
                               related_name='cars',
                               on_delete=models.CASCADE)
    license_plate = models.CharField(max_length=10, blank=False, null=False)

现在,我们将继续添加客户模型,可能是m2m字段指向汽车通过表格的租金或其他日期。所有供应商只能访问他们的汽车,即使所有汽车都在一张桌子上,他们也会为客户共享一张桌子等。

假设有一些供应商的假设情景,比如十几个,但每个都有很多车 - 数百万,我的问题是:

尝试将Cars模型拆分成多个表会有什么好处(尽管django的原理是一个表 - 一个模型,也许DB侧有好处)?

我说的是供应商分拆 - 即每个供应商都有自己的车牌。

我觉得如果每辆车都有一些描述,比如

desc = models.CharField(max_length=500, blank=True)

那么拆分可能会简化索引吗?不知道。如果有人能澄清这一点,将不胜感激。

无论如何,即使这没有真正的好处,让我们说我决定我真的需要这样做 - 将多个表粘贴到一个Django模型上。 这甚至可能吗?我的想法是尝试SQLAlchemy,看看它在哪里。

我很想看到你如何解决这个问题的任何见解或想法。或链接,如果有类似的东西的文章。

2 个答案:

答案 0 :(得分:1)

取决于您要优化的内容。如果您想快速访问某些独特字段,例如汽车VIN,则索引很有帮助。但是,一般来说,数据库将处理查询的性能优化。

如果您的表格非常大(数十亿条记录),您可以查看Instragram did with database sharding。这是如何在多个数据库实例之间拆分表的一个很酷的例子(使用PostgreSQL,但同样适用于任何关系数据库)。

答案 1 :(得分:1)

数据库表分区需要良好的设计和正确的查询。有一个与django一起使用的python app Architect

Schemaless DB是海量数据的另一种方法,众所周知Uber正在使用它。