【问题标题】:Using a regex as a DB field使用正则表达式作为数据库字段
【发布时间】:2015-12-28 12:18:10
【问题描述】:

我一直在尝试一些非常过分的事情,希望您对此发表意见。

我正在使用 Postgres 数据库来存储一些产品信息,主要是他们的家庭,使用 4 位代码。 例如,产品 A 可以有 1000、1001 和 1002,而产品 B 有 1003 和 1004。

我想用代码检索家庭。

我可以做两张表,一张包含姓氏、钥匙和其他信息,另一张包含所有代码和所需的家庭链接。然后,像这样的请求:

select familyname 
from family, familycode 
where family.pk = familycode.fk_family AND familycode = '1000' 

会做的伎俩 但由于我很贪心,我想知道是否不可能使用正则表达式并使用一个主键、一个标签和一个正则表达式来提供代码。

按照前面的例子,我会有类似的东西:

'pk' 'productA' '100[0-2]{1}'

'pk' 'productB' '100[3-4]{1}'

但是,它真的可以通过输入“1000”作为代码的单个请求返回我的“productA”吗?

感谢您的关注和回答

最好的问候

编辑:

我正在添加一个工作流程示例 我有一个参考表族,包含一个 id、一个标签和一个代码。

'pk' 'productA' 'code1'

'pk' 'productB' 'code2'

取决于家庭,我的软将采取行动。如果我有产品 A,然后我将在另一个参考表中检索链接到该产品的操作

假设下面的步骤是

从 table_operation where productref = 'productA' 中选择操作

要进行手术,我需要家人。为了得到家人,我只有代码。

由于一个家庭有很多不同的代码,我考虑在表中使用正则表达式。就是这样

【问题讨论】:

  • 你不能只选择产品代码 = 1003 用于产品 B 的产品吗?
  • posgrès 是指 PostgreSQL(或只是 Postgres)吗?
  • @dustmouse :不幸的是,我的目标是用产品代码检索家庭。我在这里举了一个简单的例子,但是我可以有例如产品 A 的 1002、1004 和产品 B 的 1003、1005。我正在尝试使用真正的泛型请求来用于任何产品。所以我不能做类似“如果结果是1002,那么使用请求A,否则如果结果是1003,使用请求B”等等。我在这里使用大约 30 种不同的产品,它们可以有 4 到 5 个不同的代码。
  • @a_horse_with_no_name : 存储库是 postgres BD,但我使用 Qt 应用程序中的经典 SQL 来调用它们
  • where some_column ~ regex_column: postgresql.org/docs/current/static/…

标签: sql regex postgresql


【解决方案1】:

我不知道你为什么要这么复杂。

在一个表中可以有两个字段

 SELECT family, familyCode
 FROM Your Table
 WHERE family = 100 and familyCode in (0,1,2)

你可以对一个字段和一个正则表达式做同样的事情,但你必须小心,因为 postgres 只能对左锚表达式值 LIKE '00%' 使用简单的索引(对大表很重要)。

另外,您设计的问题是,如果稍后您想将另一个产品 A 添加到您的库存中,您会遇到僵化的模型。这就是为什么您的第一个具有两个分隔表的解决方案要好得多。

【讨论】:

  • 如果我想找回家人,但我已经知道自己想要找回什么,那会成功。在这里,就我而言,遵循这些请求的软件必须根据家庭检索不同的数据,而我的单一条目是产品代码。例如,如果我得到一个 1000,我必须能够说“好的,它是产品 A,然后我将检索到产品 A 的所有数据链接”,但不能说“检查它是否是产品 A,如果是,然后检索到此的所有数据链接"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-12
  • 2012-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多