この問題に対処するためのより簡単な方法について、誰かがアドバイスを提供できることを願っています。高度に正規化されたデータ セットのフラット ビューの作成に取り組んでいます。フラット化の目的は、通常の人がレポート作成に使用できるビューを提供することです。ソース データには、次に示すようにいくつかのテーブルが含まれています。
CREATE TABLE VARIABLES (
VARIABLE_ID INT NOT NULL IDENTITY,
VARIABLE_NAME VARCHAR(100) NOT NULL,
VARIABLE_DATATYPE VARCHAR(100) NOT NULL,
PRIMARY KEY (VARIABLE_ID),
UNIQUE (VARIABLE_NAME,VARIABLE_DATATYPE)
)
CREATE TABLE RECORD_VALUES (
RUN_ID INT NOT NULL REFERENCES RUNS (RUN_ID) ON DELETE CASCADE,
VARIABLE_ID INT NOT NULL REFERENCES VARIABLES(VARIABLE_ID) ON DELETE CASCADE,
RECORD_ID VARCHAR(100) NOT NULL,
VARIABLE_VALUE VARCHAR(1000),
PRIMARY KEY (RUN_ID,VARIABLE_ID,RECORD_ID)
)
レコード値テーブルの variable_id は、アドレスや口座残高など、元の入力ストリームの変数の 1 つに対応します。12 個の変数を含む入力レコードの場合、レコード値テーブルには 12 行あります。
元のプロセスへの入力には、さまざまな幅と変数名のレコードが含まれます。これらは、record_values テーブルで名前/値のタプルに分割されます。変数を次のようなレコードに再構築する手順を書いています
run_id
record_id (which is actually an underlying account number)
variable_value_1
variable_value_2
...
variable_value_n
私の現在のアプローチは、指定された一連の実行の一意の変数を見つけてテーブルを動的に構築し (詳細はここでは重要ではありません)、テーブルを作成する SQL 文字列を構築することです。
私の課題は、元のデータからこの結果の作業テーブルを効率的にロードする方法です。変数の名前と数は run_id によって異なるため、これにアプローチするために私が考えることができる唯一の方法は、次のようなものです。
create a cursor for the list of variables
for each variable in the list
create a cursor to find all the record values for that variable
for each record value
update the appropriate record/column in the work table
end
end
親テーブルには数億の行があるため、これは永遠に実行されます。
目的の行ごとに 1 つの更新を行うために使用できるアプローチを生成する方法について、誰かが考えを持っていますか?
元のテーブルの設計に飛びつく人がないように - このようにするビジネス上の理由がありました。私はそれが好きではありませんが、そうするのには十分な理由がありました。
ご意見をお寄せいただきありがとうございます。
アンドリュー