存储此浏览器版本的好方法 - Django / Postgresql

时间:2010-12-27 02:18:28

标签: python sql django postgresql

我有这些数据:

  

Firefox 3.6

共有3个项目

  • 名称
  • 最新版本
  • min version

我以这种方式存储它:

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个字段中并使其可以同时解析?

我知道这可能听起来很奇怪,但我想知道是否有任何替代方案可以构建100万个模型来代表数据。


有什么想法吗? :)

2 个答案:

答案 0 :(得分:3)

你可以使它可解析,但可能无法索引。例如,您可以将这些值连接在一起,用分号(或其他字符)分隔,然后简单地拆分字符串以获取值。 “Firefox 3.6”将成为“Firefox; 3; 6”。虽然这有点容易解析,但它并没有提供比原始格式更多的优势。

这种方法的一个重要警告是该列不能以非常精细的方式进行索引。例如,您无法要求所有版本的Firefox。 PostgreSQL允许一些非常高级的索引,我相信这将允许您创建所需的索引,但我不知道您可以通过Django的ORM访问索引。

答案 1 :(得分:0)

第二个例子中MyModel的目的是什么?您只需要一张表Browser即可。为什么你需要'数百万'模型?或者你在谈论表中的行?

class Browser(models.Model):

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

很好