DB論理設計:上期と下期で製品の名前がDB
DBの論理設計で理想的な設計について、質問させていただきます。
トランザクションテーブルの製品コードを利用し、製品マスタから製品名を取得する方法です。
製品名は、製造日により、上期(4月から9月)と下期で違う名称になります。
現在のテーブル構成をご連絡します。
■トランザクションテーブル
製造日、製品コード
■製品名称マスタ(上期)
製品コード、製品名称
■製品名称マスタ(下期)
製品コード、製品名称
発生している問題
製造日により、毎回上期下期のテーブルをプログラム側で読み分ける必要があり
プログラムが煩雑となっております。
また、上期と下期よりテーブル分ける行為自体もDB設計上アンチパターンだと考えています。
考えた案
いくつか案を考えたので、賛同、否定、別の案があればご教示いただきたいです。
①現行通り
コードでなんとかする。という案です。
メリット:無いと思うのですが。。。
デメリット:コードが煩雑となり保守性が低下する。
②製品名称マスタ側に適用開始日と適用終了日の列を追加
下記構成にして、トランザクションテーブルと関連付けられるようにする
■製品名称マスタ
製品コード、適用開始製造日、適用開始終了日、製品名称
メリット:コードは取ってきた名称を取得するだけ
デメリット:上期と下期という分け方が、製品名称マスタ上表現できていない。
Join条件が複雑となる。
③製品名称マスタに上期or下期の列を追加し関連付ける
下記構成にして、トランザクションテーブルと関連付けられるようにする
■製品名称マスタ
製品コード、上期or下期、製品名称
■トランザクションテーブル
製造日、製品コード、上期or下期
メリット:コードは取ってきた名称を取得するだけ。Joinは簡単。
デメリット:トランザクションテーブル側が若干冗長化(製造日と期が被る)する。
④上期と下期と製造日を関連付けるマスタを追加(投稿者推し)
下記構成にして、トランザクションテーブルと関連付けられるようにする
■製品名称マスタ
製品コード、上期or下期、製品名称
■トランザクションテーブル
製造日、製品コード
■上期、下期判断マスタ
日付、上期 or 下期
メリット:コードは取ってきた名称を取得するだけ。
いつからがいつまでが上期なのかが分かりやすくなる。
他の機能で上期下期で分けたいときに再利用できる。
デメリット:名称までたどり着くまでに、Joinが一つ増える。
パフォーマンスが悪くなる。
※パフォーマンスは、判断マスタが365件のテーブルなので影響は無いと考える。
Joinの複雑さはViewで回避できるかなと思います。
以上長くなってしまいました。
案に対する、賛同、否定、別の案があればご教示お願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/12 05:08
2019/01/12 05:33 編集
2019/01/12 05:36