随時追加してきます。
自分がやってしまった失敗。巻き込まれてしまったこと。
うちの新人に教えるために残しています。
最悪なシステム
全テーブル、サロゲートキーで主キーが隠れてしまっている。。。。
困ったこと
主キーはリレーショナルデータベースの胆だと思っており、非常に不安を覚えました。
トランザクション系であれば、理解ができるのですがマスタも全てサロゲートキー
ユーザーコードの隣の列に「id」という列がある状況。
データ重複等不正なデータの取り扱いはどうするつもりなんだろう。。。
担当者に聞いても、DBが連番で自動的に割り振る列をサロゲートキーだと思っている節がありました。
そもそもサロゲートキーとは
ナチュラルキーが多数の組み合わせないと主キーにならない時、プログラムから
主キーで操作しやすくするために定義する。
どうしてほしかったのか
- マスタ系のテーブルにはサロゲートキーは原則つけない
- 個人的には3つ以上の複合キーを必要とする時はサロゲートキーを検討する。
- 複合キー2つはプログラム側で頑張る
- サロゲートキーとするなら「主キーA」と「主キーB」を文字列結合したものにしてほしい。
- トランザクション系のサロゲートキーは「登録日時(ミリ秒)+ 登録ユーザーID + 主キーの中でも重要なキー」がおすすめ
注意点
- 容量を喰ってしまう認識はしておかないといけない
- テーブルの情報量が減ってしまう。
- テーブル定義書等にナチュラルキーを絶対書く