У меня есть приложение по недвижимости с 20-летней историей продаж. Я хочу поместить последние 2 года списков в модель, которая будет активно запрашиваться, а остальные 18 лет - в архивированную модель.
Я использую Django 1.11 с Postgresql 9.5
Мои ограниченные знания в области управления базами данных говорят мне, что это называется «горизонтальным разделением» или «разделением». Есть ли умный способ настроить это в Django? Или просто скопировать и вставить одинаковые имена полей в ListingActive
и ListingArchive
?
class ListingActive(models.Model):
data1 = models.IntegerField()
data2 = models.CharField(max_length=10)
...
data100 = models.CharField(max_length=20)
class ListingArchived(models.Model):
same fields as ListingActive
Дополнительный вопрос. Я хочу выполнить горизонтальное разбиение и вертикальное разбиение.
Предполагается, что в каждой модели Listing
всего 100 полей, но только 10 из них активно запрашиваются. Остальные 90 полей являются подробностями отображения, которые никогда не запрашиваются.
В конце я хочу иметь 4 модели, показанные ниже. Есть ли способ использовать абстрактные модели или другой метод для его настройки?
class ListingActiveQuery(models.Model):
actively_queried_data_1 = models.IntegerField()
actively_queried_data_2 = models.IntegerField()
...
actively_queried_data_10 = models.IntegerField()
details = models.OneToOneField(ListingActiveDetails)
class ListingActiveDetails(models.Model):
data_1 = models.IntegerField()
data_2 = models.IntegerField()
...
data_90 = models.IntegerField()
class ListingArchivedQuery(models.Model):
actively_queried_data_1 = models.IntegerField()
actively_queried_data_2 = models.IntegerField()
...
actively_queried_data_10 = models.IntegerField()
details = models.OneToOneField(ListingArchivedDetails)
class ListingArchivedDetails(models.Model):
data_1 = models.IntegerField()
data_2 = models.IntegerField()
...
data_90 = models.IntegerField()