在我的 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/