2012-04-21 112 views
1

这是我的客户请求调整现有的Perl脚本。然而,最终的实际数据库结构让我感到困惑。查询自定义元数据字段?

要求看起来很简单:

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

然而,底层的数据库是不是那么简单,这里是他们的DBA的方针:

“_X是一个自定义元数据字段的数据库存储这些数据在customData表中的行而不是列中为了以高效的方式查询自定义数据表,您需要知道Fielddef表中自定义字段的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脚本不包含像什么“选择RECORD_ID FROM”但都像“SELECT StringValue FROM”。

所以这就是为什么我在这里非常困惑:什么是“存储在行中,而不是列”?为什么首先查询Field_ID表,然后CustomData?在这个周末我无法与他们沟通,但真的希望对整个事情有所了解,希望专家能够帮我整理整个结构。

更多信息(表模式):

http://pastebin.com/ZiDTCCC0

现有的Perl脚本:(重点线72-136)

http://pastebin.com/JHpikTeZ

在此先感谢。

+0

我们需要更多的信息,然后..你能显示表定义,以及perl脚本使用什么数据。 – Konerak 2012-04-21 08:51:51

+0

当然,我会粘贴到pastbin然后更新问题。 – Kevin 2012-04-21 09:03:47

+0

圣**是一些可怕的EAV:P这是如何执行的?哎哟! – Konerak 2012-04-21 16:25:59

回答

1

他们似乎正在使用的是某种Entity-Attribute-Value模型,其中的实体以整数形式存储并在另一个表(FieldDef)中进行了解释。

你解释得很清楚你是如何查询它的(尽管你可以在一个查询中使用连接或子查询来完成),而你的问题似乎是你不知道Perl脚本是如何实现的。不幸的是,没有我们看到Perl脚本,我们不能:]