- 締切済み
主キーの変更
次のようなテーブルが存在します。レコードはあくまで参考の値です。主キーについては必ず一意の値になるようにしています。 代理店sample1がIDを紛失し、再発行を依頼された場合や,その下の顧客店やこきゃくがIDを紛失し、再発行をする場合に既存のデータをそのまま保持したまま主キーだけを変更して関連された他のテーブルに一斉に反映させるにはどうすればよいでしょうか? ここには記載していませんが顧客店IDやこきゃくIDに関連する別テーブルが10ほど存在します。 主キーが存在するレコードと重複していないかをまずチェックしてそこから基礎となるテーブルに書き換えを行いと考えているのですが、思考がそこで止まってしまっています。 よろしければアドバイスをよろしくお願いいたします。 代理店テーブル |代理店ID(主キー) |代理店名| | aaaaa | sample1| | bbbbb | sample2| 顧客店テーブル |代理店ID(主キー) |顧客店ID(主キー)|顧客店名| | aaaaa | a-00001| ○○1店| | aaaaa | a-00002| ○○2店| | bbbbb | b-00001| △△1店| | bbbbb | b-00002| △△2店| 顧客テーブル |顧客店ID(主キー) | こきゃくID(主キー)| こきゃく名| | a-00001| a-20071015-00001| Aさん | | a-00002| a-20071015-00002| Bさん | | b-00001| b-20050915-00001| Cさん | | b-00002| b-20050915-00002| Dさん |
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- ese_ee
- ベストアンサー率48% (68/139)
各IDは別途UNIQUEインデックスで一意性を確保し、 主キーはSEQUENCE等を使用して「他に意味を持たない値」にしたほうが、 扱いやすいかと思います。 主キーに主キー以外の意味を兼務させたり、 あとで変更が必要になるものを主キーにするのは避けるべきです。
- calltella
- ベストアンサー率49% (317/635)
IDを再発行し、なおかつ顧客データを維持する場合は いずれにしても代理店sample1のIDを特定する必要がありますよね? ならば代理店sample1にIDを伝えた方が手っ取り早いと思うのですが 業務的にできないとなると各テーブルから代理店sample1の主キーを 新規のIDに書き換えるしかないですね。
お礼
ご回答有難うございます。参考にさせていただきます。
補足
ご回答有難うございます。 まだまだ勉強足らずと言葉足らずで申し訳ないのですが、設計が上記の形で走ってしまっている場合は修正が可能でしょうか? 参考といたしまして、このような質問内容に類似したシステムの構築を行う際に参考となる文献やホームページをご存知でしたらお手数ではございますが教えていただけないでしょうか?