django - 在 Django 应用程序的数据库列中保存标签(逗号分隔)会使大数据库变慢

标签 django database postgresql search full-text-indexing

在我的 Django 应用程序中,我的系统将根据某些标准生成 标签。并且一本书将被标记多个标签。

目前在 book 表中,我将标签存储为逗号分隔值。

 class books(models.Model):
  book_id = models.AutoField(primary_key=True, auto_created=True)
  search_tags = models.TextField(default='[]')

在数据库中,标签将如下所示。

HUPB,CWGL,ABNG,USXQ,CEXV,BYPC

但是当我使用标签搜索它时,我必须使用 search_tags__contains('ABNG') 哪个有效。 但现在我的数据库预计会变大,一本书可以有超过 100 个唯一标签,我的数据库中可以有数百万本书。

这看起来是一个非常普遍的问题,所以想知道是否有人可以建议一种好的技术来实现同样的目标。

最佳答案

正确的模式是对单独的标签表使用多对多关系。

class Tag(models.Model):
    name = models.CharField(max_length=4)

class Book(models.Model):
    tags = models.ManyToManyField(Tag)

现在您可以执行 Book.objects.filter(tags__name='ABNG')

(注意,Django 模型名称应该是单数,并以大写字母开头。)

关于django - 在 Django 应用程序的数据库列中保存标签(逗号分隔)会使大数据库变慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29513718/

相关文章:

django - 两个独立的 Django 应用程序需要相同的模型

php - 当我以后需要密码时如何在纯 tex (php) 中保存密码

ruby-on-rails - 确保我的 SQL 未注入(inject)接收值数组

arrays - PLPGSQL 数组索引从 1 开始?

php - 获取sql格式的服务器时间戳

javascript - 将 Grunt 与 Django 一起使用 : Best Workflow

python - 如何在 Django 中向 UserCreationForm 添加字段?

django - 如何调用 Django-Admin 风格,以更少的代码提供更多

mysql - 根据概率机会选择随机值

php - 无法将电子邮件插入 wordpress 数据库