2012-04-21 137 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腳本,我們不能:]