【发布时间】:2018-05-16 19:12:23
【问题描述】:
假设有某种汽车租赁/销售聚合器。它与许多服务提供商(向客户提供汽车)和客户本身合作。
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 以及租金或其他日期。即使所有汽车都在一张桌子上,所有供应商都只能访问他们的汽车,他们将为客户共享一张桌子,等等。
假设有几个供应商,比如十几个供应商,但每个供应商都有很多汽车 - 数以百万计,我的问题是:
尝试将 Cars 模型拆分为多个表会有什么好处(尽管 django 的原则是一张表 - 一个模型,也许在 DB 端有好处)?
我说的是按供应商拆分 - 即每个供应商都有自己的汽车桌。
我觉得如果每辆车都有一些描述,比如
desc = models.CharField(max_length=500, blank=True)
那么拆分可能会简化索引?不知道。如果有人能澄清这一点,将不胜感激。
无论如何,即使这样做没有真正的好处,假设我决定我真的需要这样做 - 将多个表粘合到一个 Django 模型。 这甚至可能吗?我的想法是尝试 SQLAlchemy,看看会发生什么。
我很想知道您将如何解决此类问题的任何见解或想法。或链接,如果有类似内容的文章。
【问题讨论】:
-
不,通常如果模型被正确索引(通常是这样),数据库应该有效地处理这个问题。此外,数据库管理器可以决定将表拆分到多个磁盘、服务器等。您尝试在错误的层上解决问题。数据库负责对数据的快速访问等,而 django 负责将数据映射到 Python 对象的优雅方式,您负责对它执行有用的事情。
-
DB 表partitioning 可以是一个选项,它减少了搜索时间和表空间。但是设计有点棘手。