查询自定义元数据字段?

时间:2012-04-21 08:31:18

标签: mysql perl

这是我的客户要求调整现有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?在本周末期间我无法与他们沟通,但我真的希望对整个事情有所了解,希望专家能帮助我整理整个结构。

更多信息(表格架构):

http://pastebin.com/ZiDTCCC0

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

http://pastebin.com/JHpikTeZ

提前致谢。

1 个答案:

答案 0 :(得分:1)

他们似乎使用的是某种Entity-Attribute-Value模型,实体存储为int并在另一个表(FieldDef)中解释。

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