在postgres中,我应该使用什么数据类型来存储一组唯一的字符串?
是用一个简单的数组然后当我想写的时候,我读取当前的字符串集合,确定最后的集合应该是什么,考虑唯一性然后写回来的最好方法?似乎有点效率低下。
我可能会经常做= ANY
查询,以确定数组是否包含元素
一个可能的数据模型看起来像:
BlogPost
- title
- tags: string[]
字符串
2种常见操作:
- 查找具有给定标签的博客文章
- 更新标签列表(理想情况下保持它是一个唯一的集合)
在postgres中,我应该使用什么数据类型来存储一组唯一的字符串?
是用一个简单的数组然后当我想写的时候,我读取当前的字符串集合,确定最后的集合应该是什么,考虑唯一性然后写回来的最好方法?似乎有点效率低下。
我可能会经常做= ANY
查询,以确定数组是否包含元素
一个可能的数据模型看起来像:
BlogPost
- title
- tags: string[]
字符串
2种常见操作:
3条答案
按热度按时间thtygnil1#
我建议使用一个单独的表的标签。其优点是标签可以被索引并被有效地访问。索引进一步保证每个帖子的标签是唯一的。
字符串
w7t8yxp52#
我从你的问题中理解到,你想确保你为每个帖子都有一组唯一的字符串,如果是这样,那么你可以使用
TEXT
和UNIQUE来确保这样:字符串
UNIQUE
将确保表中的每个集合都是唯一的。如果你尝试两次插入相同的集合,你会得到这样的错误:型
我希望这能回答你的问题,让我知道你的情况!
gcxthw6b3#
@ahmed_131313在正确的路径上,但其解决方案无法正确创建“唯一”数组。它确实禁止多次出现 exact same 数组。但是,is并不唯一地约束数组的元素;它允许
{"postgresql", "sql"}
和{"sql", "postgresql"}
。数组中的每个元素都存在于另一个数组中,并且没有一个元素不在另一个数组中。您可以使用返回给定数组的有序唯一值的函数来创建唯一索引,而不是使用唯一约束。所以呢
字符串
然后定义没有唯一约束的表,但使用上述函数创建唯一索引。
型
请参见domo,其中显示了每个场景。