![](https://blogimg.goo.ne.jp/user_image/38/cc/e2c7f37598233b18300550c8404b8a0b.png)
後述する正規化を行うために、まず、対象のデータのキー・識別子を設定する必要があります。キー・識別子につていはいくつかの考え方がありますので、以下で説明をしておきます。
【主キー】
エンティティのインスタンスを一意に識別するための、一つまたは複数の属性のことです。
![](https://blogimg.goo.ne.jp/user_image/72/5a/edda6d556196c5206939fd798d9844d1.png)
(図1)得意先コードにより得意先を一意に識別
【候補キー】
エンティティのインスタンスを一意に識別するための、一つまたは複数の属性のことです。主キーになりうる属性の組み合わせ(主キーにならなかったキー)のこと。
![](https://blogimg.goo.ne.jp/user_image/64/72/7651d0ed60da0266111916fa52eb41d6.png)
(図2)得意先名で得意先電話番号を識別
【代理キー】
長い複合キー(複数の項目で構成されるキー)は代理キー(Surrogate Key)で置き換えることがあります。この代理キーのことをいいます。 (例)支払計画の行(ロー)は「支払先コード」「支払区分」「支払予定年月」「支払先銀行コード」「支払先銀行支店コード」「支払先口座区分」「支払先口座番号」でユニークになりますが、これらの複合キーの代わりに「支払計画番号」を代理キーとします。
![](https://blogimg.goo.ne.jp/user_image/63/39/7c415ab45f8b141b27465bcc3f489e1f.png)
(図3)代理キーの例
(参考)データモデリングの段階では、データをどのような単位で管理するのかを分析していきます。 あるプロジェクトで実際にあったのですが、全てのエンティティに対して代替キーを設定していました。処理的にはそれでも何の問題はなかったのですが、データモデルとしてみてみると、代替キーを無条件に適用していることによって、データの管理単位がわかりにくくなってしまいます。 従って、論理データモデルを作成するタイミングでは、複合キー(複数のデータ項目で構成されるキー)で識別するエンティティについては、そのままの形でキーを設定することが望ましいと考えます。
【主キー】
エンティティのインスタンスを一意に識別するための、一つまたは複数の属性のことです。
![](https://blogimg.goo.ne.jp/user_image/72/5a/edda6d556196c5206939fd798d9844d1.png)
(図1)得意先コードにより得意先を一意に識別
【候補キー】
エンティティのインスタンスを一意に識別するための、一つまたは複数の属性のことです。主キーになりうる属性の組み合わせ(主キーにならなかったキー)のこと。
![](https://blogimg.goo.ne.jp/user_image/64/72/7651d0ed60da0266111916fa52eb41d6.png)
(図2)得意先名で得意先電話番号を識別
【代理キー】
長い複合キー(複数の項目で構成されるキー)は代理キー(Surrogate Key)で置き換えることがあります。この代理キーのことをいいます。 (例)支払計画の行(ロー)は「支払先コード」「支払区分」「支払予定年月」「支払先銀行コード」「支払先銀行支店コード」「支払先口座区分」「支払先口座番号」でユニークになりますが、これらの複合キーの代わりに「支払計画番号」を代理キーとします。
![](https://blogimg.goo.ne.jp/user_image/63/39/7c415ab45f8b141b27465bcc3f489e1f.png)
(図3)代理キーの例
(参考)データモデリングの段階では、データをどのような単位で管理するのかを分析していきます。 あるプロジェクトで実際にあったのですが、全てのエンティティに対して代替キーを設定していました。処理的にはそれでも何の問題はなかったのですが、データモデルとしてみてみると、代替キーを無条件に適用していることによって、データの管理単位がわかりにくくなってしまいます。 従って、論理データモデルを作成するタイミングでは、複合キー(複数のデータ項目で構成されるキー)で識別するエンティティについては、そのままの形でキーを設定することが望ましいと考えます。
代理キーの方が主キーになる場合もありますから。