人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

DBでコードを読み替えするときはどんな構成にしますか?
支払い区分フィールドにAとあれば「振込」、Bとあれば「現金」
支払い状況フィールドにAとあれば「優良」、Bとあれば「過去滞納あり」・・・
というような設計のマスタテーブルがあり、読み替え項目は20個を超えます。

一応自分で作ったのは、「コード:名称」の2フィールドからなる読替テーブルをつくり
「001-A:振込」
「001B:現金」
「002-A:優良」
「002-B:過去滞納」
これを登録し、以下のようにSQLを作りました。2,3個ならいいのですが20項目が40項目になったりすると、ちょっときついです。
もっとよい方法があれば教えてください。

select
読替テーブル.*, yomi1.名称, yomi2.名称
From マスタテーブル
innner join 読替テーブル as yomi1 on '001-' || 支払い区分フィールド
innner join 読替テーブル as yomi2 on '002-' || 支払い状況フィールド

●質問者: hakob
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:as dB ON SELECT SQL
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● kn1967
●41ポイント

■案1 読替テーブルを必要分作ってしまう

支払い区分テーブル

「A:振込」

「B:現金」

支払い状況テーブル

「A:優良」

「B:過去滞納」

この方法の利点は質問文内のSQLよりは少しシンプルに書けるし

インデックスも有効に働くため高速な動作が期待できる。

ただ、項目数が多くなればなるほど面倒になるという点はあまり変わらない。


■案2 読み替えはSQLではなくプログラム側で行う

この方法の利点は、クライアント側で処理させた場合にDBサーバと回線の負担軽減に繋がる。

ただし、このままではコードと名称が変動する度に大掛かりなメンテナンスが発生したりするため

変換用データを再読み込みするような工夫が必要。


■案1と案2の折衷

性別と言えば「男」「女」といったように変動が無いものはプログラム側で変換処理を行い

変動のあるものはテーブルとして持たせておく。

これが一番現実的で多用してます。


以上、参考になればよろしいのですが・・・。

◎質問者からの返答

案2はXMLファイルなどで、読替テーブルとする方式がよさそうですね。

<支払区分 code="A" name="振込" />

<支払区分 code="B" name="現金" />

<支払状況 code="A" ・・・・

案1は、個別の読替パターンは少なく(たとえば支払い区分は現金や振込のほかに4種類ほど)なっているので微妙ですね。

ただ、変動が想定されるもの・件数が多いものならいいかも。(都道府県くらいだと微妙で悩ましい。国名や、国-地域なんていうスケールなら確定ですね。各都道府県に数件?数十件支社があるような場合とか。)


2 ● きゃづみぃ
●29ポイント ベストアンサー

>支払い区分フィールドにAとあれば「振込」、Bとあれば「現金」

>支払い状況フィールドにAとあれば「優良」、Bとあれば「過去滞納あり」・・・

Aなら 振込

Bなら 現金 というようなのを関数でやる場合、

オラクルなら DECODEやCASE文が使えます。

http://www.shift-the-oracle.com/sql/case-decode-difference.html

DBには、こういう関数がいろいろありますので、使用のDBで確認してみてください。

◎質問者からの返答

CASE式はいろいろ使えて便利です。

実は今回も(質問には乗せてなかったのですが)、あるオプションを付けているか居ないかについて、1なら「有」0なら「無」の判定をするために、十個くらい使ってたりします^^;

DECODE関数はORACLE固有なのですね。使ったことが無いので存在すら知りませんでした。

CASE式を用いての集計など、幅広く応用があるので面白いです。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ