Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 具有许多关系的模型_Django_Django Models - Fatal编程技术网

Django 具有许多关系的模型

Django 具有许多关系的模型,django,django-models,Django,Django Models,我有一个这样的模型: class Property(models.Model): rsa = models.ForeignKey(settings.AUTH_USER_MODEL) #Real State Agency agents = models.ManyToManyField(Agent) title = models.CharField(max_length=250, blank=False, null=False, verbose_name=_('Title')

我有一个这样的模型:

class Property(models.Model):
    rsa = models.ForeignKey(settings.AUTH_USER_MODEL) #Real State Agency
    agents = models.ManyToManyField(Agent)
    title = models.CharField(max_length=250, blank=False, null=False, verbose_name=_('Title'))
    slug = AutoSlugField(populate_from='title', unique=True, db_index=True)
    date_created = models.DateTimeField(auto_now_add=True)
    date_updated = models.DateTimeField(auto_now=True)
    country = models.ForeignKey(PropertyCountry, null=False)
    state = models.ForeignKey(PropertyState, null=False)
    city = models.ForeignKey(PropertyCity, null=False)
    neighborhood = models.CharField(max_length=250, default='')
    neighborhood_alias = models.CharField(max_length=250, blank=True, default='')
    address = models.CharField(max_length=150, blank=True, default='')
    phone = models.CharField(max_length=20, default='')
    contact_email = models.EmailField(max_length=250, default='')
    price = models.IntegerField(default=0, null=False)
    price_admin = models.IntegerField(default=0, null=False)
    area = models.IntegerField(default=0, null=False)
    private_area = models.IntegerField(blank=True, default=0, null=False)
    bedrooms = models.IntegerField(blank=True, default=0, null=False)
    bathrooms = models.IntegerField(blank=True, default=0, null=False)
    property_type = models.ForeignKey(PropertyType, null=True)
    type_offer = models.ForeignKey(OfferType, null=True)
    status = models.ForeignKey(Status, blank=True, null=True)
    antiquity = models.ForeignKey(YearsOld, blank=True, null=True)
    number_floors = models.IntegerField(default=1, blank=False, null=False)
    state_property = models.ForeignKey(StateProperty, null=True)
    comment = models.TextField(blank=True, default='', verbose_name=_('Comment'))
    parking_spaces = models.PositiveSmallIntegerField(blank=True, default=0, null=False)
    weather = models.ForeignKey(WeatherType, blank=True, null=True)
    stratus = models.IntegerField(default=-1, blank=True, null=False)
    address_view = models.ForeignKey(AddressView, null=True)
其中大多数外键类似于:

class PropertyType(models.Model):
    name = models.CharField(max_length=50, default='')
    id_something_a = models.IntegerField(default=-1, blank=False, null=False)
    id_something_b = models.IntegerField(default=-1, blank=False, null=False)
如您所见,许多字段要么是外键,要么是多对多。如果我想检索我的属性的所有数据,我需要大量的连接,我认为这最终会变得很慢

作为替代方案,在本例中,我可以使用选择字段并在python中映射值(这些外键中的值不会经常更改)

我的问题是:

  • 是否有其他方法可以对此进行建模,同时减少可能出现的性能损失
  • 有必要担心吗?(惩罚不够大,外键/连接不够,无法造成重大后果等)

我喜欢尽可能使一切正常化,直到出现疼痛。然后我针对主要用例进行优化,根据需要进行反规范化。别忘了,你可以在这个问题上投入更多的硬件,并看到很好的结果。然而,这确实是一种创可贴。 如果您的联接在大型表之间,那么就有理由担心。我会尽量避免一次获取所有数据。使查询更小,以缩短查询时间。但是,如果要进行数据转储,则需要时间


基本上,我的方法是在架构上保持良好,直到它们成为问题。然后在需要的地方进行优化,成批加载,并增加RAM/CPU/硬件。我已经在10GB范围内的数据集上使用了这种方法,其中有6个以上的表数以百万计。我从来没有一张表的数据量超过5000万,所以我不能对庞大的数据集说话。

我喜欢尽可能地规范一切,直到出现问题为止。然后我针对主要用例进行优化,根据需要进行反规范化。别忘了,你可以在这个问题上投入更多的硬件,并看到很好的结果。然而,这确实是一种创可贴。 如果您的联接在大型表之间,那么就有理由担心。我会尽量避免一次获取所有数据。使查询更小,以缩短查询时间。但是,如果要进行数据转储,则需要时间


基本上,我的方法是在架构上保持良好,直到它们成为问题。然后在需要的地方进行优化,成批加载,并增加RAM/CPU/硬件。我已经在10GB范围内的数据集上使用了这种方法,其中有6个以上的表数以百万计。我从来没有一个表的数据量超过5000万,所以我不能对庞大的数据集说话。

在这种情况下,唯一会增长的表是Property…其他表只是最大6列的小表,我不希望超过200行。在这种情况下,惩罚会有多大?在这种特定情况下,唯一会增长的表是Property…其他表都是最多6列的小表,我预计不会超过200行。这个案子的处罚有多大?发现这个:发现这个: