1

这是我的客户要求调整现有 Perl 脚本的请求。然而,让我感到困惑的是他们的实际数据库结构。

要求看起来很简单:

only pull records where _X begins with 1, 2, or 9.

但是,底层数据库并不是那么简单,这是他们 DBA 的指导方针:

"_X 是自定义元数据字段。数据库将此数据存储在 customData 表中的行中,而不是列中。为了以有效的方式查询自定义数据表,您需要知道从中获取的自定义字段的 Field_ID字段定义表:

SELECT Field_ID FROM FieldDef WHERE Name = "_X";

   This returns:
   10012

“现在您可以查询CustomData。例如:

SELECT Record_ID FROM CustomData where Field_ID="10012" AND StringValue="2012-04";

他还建议,就我而言,可能是:

"SELECT Record_ID FROM CustomData where Field_ID="10012" AND (StringValue LIKE '1%' || StringValue LIKE '2%' || StringValue LIKE '9%')

奇怪的是,现有的 Perl 脚本不包含像“Select Record_ID FROM”这样的东西,而是像“SELECT StringValue FROM”一样。

所以这就是为什么我在这里很困惑:什么是“存储在行中,而不是列中”?为什么先查询 Field_ID 表再查询 CustomData?这个周末我将无法与他们中的任何人交流,但真的希望对整个事情有所了解,希望专家可以帮助我整理整个结构。

更多信息(表架构):

http://pastebin.com/ZiDTCCC0

现有的perl脚本:(关注第72-136行)

http://pastebin.com/JHpikTeZ

提前致谢。

4

1 回答 1

1

他们似乎使用的是某种实体-属性-值模型,实体存储为整数并在另一个表 (FieldDef) 中解释。

您很好地解释了您是如何查询它的(尽管您可以在一个查询中使用连接或子查询来完成),您的问题似乎是您不知道 Perl 脚本是如何做到的。不幸的是,如果我们没有看到 Perl 脚本,我们也不能:]

于 2012-04-21T08:55:24.780 回答