Хороший способ хранить версии этого браузера - Django / Postgresql - PullRequest
1 голос
/ 27 декабря 2010

У меня есть эти данные:

Firefox 3.6

Есть 3 пункта

  • имя
  • максимальная версия
  • минимальная версия

Я храню его таким образом:

class MyModel(models.Model):

    browser_name = models.CharField(...)
    browser_max_version = models.IntegerField(...)
    browser_min_version = models.IntegerField(...)

или альтернативный

class Browser(models.Model):

    name = models.CharField(...)
    max_version = models.IntegerField(...)
    min_version = models.IntegerField(...)

class MyModel(models.Model):

    browser = models.ForeignKey(Browser)

Есть ли какой-нибудь умный способ сохранить значение в 1 поле и сделать его анализируемым одновременно?

Я знаю, что это может звучать странно, но мне интересно, есть ли альтернатива созданию 1 миллиона моделей для представления данных.


Есть идеи?:)

Ответы [ 2 ]

3 голосов
/ 27 декабря 2010

Вы можете сделать его разбираемым, но, вероятно, не индексируемым. Например, вы можете объединить значения, разделенные точками с запятой (или другим символом), а затем просто разделить строку, чтобы получить значения обратно. «Firefox 3.6» станет «Firefox; 3; 6». Хотя это немного легче разобрать, но оно не дает большого преимущества перед исходным форматированием.

Большая оговорка при таком подходе заключается в том, что столбец не будет индексируемым очень детально. Например, вы не можете запросить все версии Firefox. PostgreSQL допускает некоторую очень продвинутую индексацию, которая, я считаю, позволила бы вам создавать требуемые индексы, но я не знаю, каким образом вы могли бы получить доступ к индексам через ORM Джанго.

0 голосов
/ 27 декабря 2010

Какова цель MyModel во втором примере?Одна таблица Browser - это все, что вам нужно.С какой стати вам нужны «миллионы» моделей?Или вы говорите о строках в таблице?

class Browser(models.Model):

    name = models.CharField(...)
    max_version = models.IntegerField(...)
    min_version = models.IntegerField(...)

хорошо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...