LoginSignup
0
2

More than 5 years have passed since last update.

依存リレーションシップとサロゲートキーとナチュラルキー

Posted at

はじめてのテーブル定義作成

初めて独力でウェブアプリを作成するので、テーブル定義書を作成したが、うまく作れなかった。
特に、外部キー(FK)に関する理解が薄くER図が作れなかった。
(親エンティティの主キー(PK)にしか外部キーを張れなかった。)
先輩のエンジニアやネット上で相談したところ、

  • 依存リレーションシップ
  • サロゲートキー
  • ナチュラルキー

について理解するように指導して貰ったので、学んだことをアウトプットする。

サロゲートキー

連番となるような、(例えば自動採番する)カラムを用意して主キーとする。これをサロゲートキーと呼ぶ。
ナチュラルキーには、別途、ユニーク制約を付与する。

ナチュラルキー

業務的にそのテーブルをユニークにするキー
「患者名+部屋番号+ベッド番号」のように、サロゲートキーと違い、項目の内容自体が意味を持つ。

依存リレーションシップ

親エンティティが存在しなければ、子エンティティが存在しえないもの。
言い方を変えれば、親エンティティのPKをたどると、子エンティティが参照できるもの。
また、依存リレーションシップでは、ER図を書く際には、PKにFKを指定しなければならない。

なぜER図が作れなかったのか

ER図の作成には、ツールの「A5:SQL Mk-2」を用いてxamppのphpMyAdminで作ったDBからER図をリバース生成した。
A5:SQL Mk-2では、カーディナルのプロパティに☑依存(親ー>子)のチェックボックスがあり、
チェックされた状態では、PKにしかリレーションを張れない。
なので、PKに指定されていないキーにFKを張ろうとしたのに、PKに貼られてしまうという事態が生じた。

解決方法

カーディナルの依存のチェックを外すか、PKでないキーに対してリレーションを張ればよいが、わたしのミスはもっと単純で、本来FKを張るべきでないエンティティに対して、FKを張ろうとしていたので、対する誤ったエンティティーのPKにリレーションが張られていた。

下記のサイトと先輩の言葉を参考にしました。

ありがとうございました。

0
2
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
0
2