【发布时间】:2021-05-18 19:30:32
【问题描述】:
我不确定我的数据库设计是否适合这种棘手的情况,并且我还寻求帮助,对此查询的外观如何。
我计划使用下表进行查询:
search_array | value | id
-----------------------+-------+----
{XYa,YZb,WQb} | b | 1
{XYa,YZb,WQb,RSc,QZa} | a | 2
{XYc,YZa} | c | 3
{XYb} | a | 4
{RSa} | c | 5
search_array 中有 5 个主要元素:XY、YZ、WQ、RS、QZ 和 3 个值:a、b、c,它们与每个元素关联。 每行也有一个值:a、b 或 c。
我的目标是在这个意义上找到适合特定行的所有行:首先应该检查它们的 search_arrays 中是否有任何相同的主要元素(示例中标记为黄色) .
例如:
第 4 行和第 5 行不匹配,因为 XY != RS。
第 1、2 和 3 行将匹配两次,因为它们都有 XY 和 YZ。
行 id 1 和 2 甚至会匹配 3 次,因为它们也有共同的 WQ。
和second:如果有一个主元素匹配,如果主元素后面的小写字母适合另一行的值,则应该“交叉检查”。
例如:表中第 1 行的唯一匹配项是第 4 行,因为它们都搜索 XY 和元素匹配两行的每个值之后的低字母。 另一个匹配是 ROW id 2 和 5 与 RS 并搜索 c 到值 c 并搜索 a 到值 a(绿色和橙色标记)。
我的想法是使用字符串的 RIGHT 和 LEFT 命令将查询中的 search_array 元素分成两部分。但我不知道如何组合这个搜索的子查询。
或者会是更快的完整其他解决方案吗?就像将搜索数组拆分为另一个表,其中包含主表的“foregin key”列、“main element”和“searched_value”。我不确定这是否是最佳解决方案,因为程序会一直切换到主表以从 300 万行中查找两行以将它们的 searched_values 与值进行比较?
非常感谢您的回答和时间!
【问题讨论】:
-
请将格式化文本显示为文本,而不是图像。我们无法将您的示例复制并粘贴到实际可运行的内容中。
标签: arrays postgresql performance database-design