1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

リレーショナルデータベースの備忘

Posted at

随時追加してきます。
自分がやってしまった失敗。巻き込まれてしまったこと。
うちの新人に教えるために残しています。

最悪なシステム

全テーブル、サロゲートキーで主キーが隠れてしまっている。。。。

困ったこと

主キーはリレーショナルデータベースの胆だと思っており、非常に不安を覚えました。
トランザクション系であれば、理解ができるのですがマスタも全てサロゲートキー
ユーザーコードの隣の列に「id」という列がある状況。
データ重複等不正なデータの取り扱いはどうするつもりなんだろう。。。
担当者に聞いても、DBが連番で自動的に割り振る列をサロゲートキーだと思っている節がありました。

そもそもサロゲートキーとは

ナチュラルキーが多数の組み合わせないと主キーにならない時、プログラムから
主キーで操作しやすくするために定義する。

どうしてほしかったのか

  • マスタ系のテーブルにはサロゲートキーは原則つけない
  • 個人的には3つ以上の複合キーを必要とする時はサロゲートキーを検討する。
  • 複合キー2つはプログラム側で頑張る
  • サロゲートキーとするなら「主キーA」と「主キーB」を文字列結合したものにしてほしい。
  • トランザクション系のサロゲートキーは「登録日時(ミリ秒)+ 登録ユーザーID + 主キーの中でも重要なキー」がおすすめ

注意点

  • 容量を喰ってしまう認識はしておかないといけない
  • テーブルの情報量が減ってしまう。
  • テーブル定義書等にナチュラルキーを絶対書く
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?