- 締切済み
データの整合性について
お世話になります。 皆さんからアドバイスをいただきたく投稿しました。 下記のような各マスタがあります。 店舗マスタ ・店舗コード ・店舗名 ・ジャンルコード ・削除フラグ ・登録日 ・登録者 ・更新日 ・更新者 ジャンルマスタ ・ジャンルコード ・ジャンル名 ・削除フラグ ・登録日 ・登録者 ・更新日 ・更新者 皆さんに聞きたい事はレコードデータに登録されているマスタデータの整合性についてです。 例えばジャンルマスタの下記のレコードが登録されているとします。 ・ジャンルコード:1000 ・ジャンル名:書籍 次に店舗マスタの下記のレコードが登録されているとします。 ・店舗コード:0001 ・店舗名:あいうえお書店 ・ジャンルコード:1000 ジャンルマスタからジャンルコードが「1000」のレコードを削除された場合に店舗マスタに登録されているジャンルコードが無くなってしまいます。このような事が起きないようにするにはどのような事をするのが正しいのでしょうか。 現在、私が考えているのは既に登録されているジャンルマスタの更新はジャンルコード以外は更新できるようにします。またジャンルマスタのデータの削除については既に店舗マスタに登録されている場合は削除できないようにする事を考えています。このような処理しか思いつきませんでした。 説明が下手ですみませんが理解していただけましたでしょうか。 どうが、皆さんのお知恵をお貸し下さい。またアドバイスをいただけませんでしょうか。 本当に申し訳ありませんが宜しくお願いします。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- ahoo_ok
- ベストアンサー率31% (30/95)
ジャンルマスタ側に削除フラグを用意するだけで実際には削除しない。 って >・削除フラグ すでに削除フラグあるじゃないか。 実務システムでも削除フラグだけで削除したことにして物理削除はしないことなんてよくあることです。 (これにより既存のデータはそのままで店舗データ新規登録時にその削除したジャンルを紐付けさせない)
- wave117
- ベストアンサー率100% (5/5)
>私が考えているのは既に登録されているジャンルマスタの更新はジャンルコード以外は更新できるようにします。またジャンルマスタのデータの削除については既に店舗マスタに登録されている場合は削除できないようにする事を考えています。 私も質問者の方同様の設計を行います。 実装は、回答No2の方と同様、DBの外部キー制約を使います。アプリケーション側での制御は行いません。 また、ご質問の回答からは外れますが、ジャンルコードはどのように採番されているでしょうか? 例えば、大区分+中区分+小区分=ジャンルコードのような採番方法ですと、採番ルール変更の際のコストが非常に高くなります。 私ならばリレーションするカラムはautoincrementで採番を行い、カラム値にリレーション以上の意味を持たせない方法を取ります。
お礼
回答、ありがとうございます。 返答が遅くなってすみません。 今から変更する事が無理なので私が考えていた方法で対応する事にしました。 皆さんの意見、またアドバイスは次に生かしたいと思います。 どうもありがとうございました。
- JaneDue
- ベストアンサー率75% (263/350)
ご推察のように「削除できないようにする」または「両方とも削除する」のどちらかしかないかと。 「ジャンルは削除したいが店舗データは削除したくない」という場合は、未分類・その他用の「ノンジャンル」を作成しておき、そちらへ放り込んでおく、という方法もあります。
お礼
回答、ありがとうございます。 返答が遅くなってすみません。 今から変更する事が無理なので私が考えていた方法で対応する事にしました。 皆さんの意見、またアドバイスは次に生かしたいと思います。 どうもありがとうございました。
- ok-kaneto
- ベストアンサー率39% (1798/4531)
http://itpro.nikkeibp.co.jp/article/COLUMN/20090512/329851/ DB側で参照整合性制約を設定するのはダメなんでしょうか?
>> 既に店舗マスタに登録されている場合は削除できないようにする これが一番望ましい方法でしょう。もしくは、両方とも削除するという選択肢もありますが… もし片方だけアクションが成功したら困る場合はトランザクションを用います↓ http://okwave.jp/qa/q8665630.html http://okwave.jp/qa/q8666689.html
お礼
回答、ありがとうございます。 返答が遅くなってすみません。 今から変更する事が無理なので私が考えていた方法で対応する事にしました。 皆さんの意見、またアドバイスは次に生かしたいと思います。 どうもありがとうございました。