这是我的客户要求调整现有Perl脚本的请求。但是,实际的数据库结构让我感到困惑。
要求看起来很简单:
only pull records where _X begins with 1, 2, or 9.
但是,底层数据库并不那么简单,这是DBA的指南:
“_ X是一个自定义元数据字段。数据库将这些数据存储在customData表中的行而不是列中。为了以有效的方式查询自定义数据表,您需要知道自定义字段的Field_ID从fielddef表中获取:
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?在本周末期间我无法与他们沟通,但我真的希望对整个事情有所了解,希望专家能帮助我整理整个结构。
更多信息(表格架构):
现有的perl脚本:(专注于第72-136行)
提前致谢。
答案 0 :(得分:1)
他们似乎使用的是某种Entity-Attribute-Value模型,实体存储为int并在另一个表(FieldDef)中解释。
你很好地解释了你是如何查询它的(虽然你可以在一个查询中使用连接或子查询来完成),而你的问题似乎是你不知道Perl脚本是如何做到的。不幸的是,如果没有我们看到Perl脚本,我们就不能:]