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

彼らが使用しているように見えるのは、ある種のエンティティ-属性-値モデルであり、エンティティは int として格納され、別のテーブル (FieldDef) で説明されています。

あなたはそれをどのように照会したかをかなりよく説明しました (ただし、結合またはサブクエリを使用して 1 つのクエリで実行できます)。問題は、Perl スクリプトがそれを行う方法がわからないことのようです。残念ながら、Perl スクリプトを見なければ、どちらもできません :]

于 2012-04-21T08:55:24.780 に答える