skillup

技術ブログ

Database

エンティティの抽出と主キー決定

投稿日:2017年7月10日 更新日:

主に設計に関することのメモ。

業務フロー分析

顧客の業務フローがどのように動いているのかを図で確認する。

使えそうと思った図式化の手法は下記のようなもの

  1. まずやることを業務順に箇条書きにする。
  2. 実行順番と実行者がわかりやすいようにアクティビティー図にする。
  3. のちにエンティティを抽出したあとER図を作成する。

エンティティの抽出

業務フローの中で扱われる実態のあるリソース(顧客・社員・商品など)やイベント(入荷、出荷、注文)を抽出する。またイベントの履歴(購買履歴、在庫履歴)のようなサマリー系といわれるデータも存在する。

エンティティの関連付け

わかりやすいように可視化する。一般にイベントエンティティの上にリソースエンティティを書いたほうがわかりやすい。

ここで1:nなどの関連付けを行う。

主キーの抽出を行う

インスタンスをユニークに識別する値のこと。

主キーの特徴

  • 値が不変
  • 桁数がなるべく短い
  • 複合した場合でも多くはならない(5つ以下)
  • 必ず存在する(NULLにならない)

一般的には複数の主キーを使う、複合主キーが多いため、いわゆるauto_incrementタイプの自動で附番されるidをサロゲートキー(代理キー)といい、これが使われるケースが多い。

できれば自然に存在しているデータで主キーを考え、やむを得ずコードやidなどを考えるべき。コードなどは自動採番などではなく意味を込めて作ることができれば望ましい。JANコードはそういうつくり。(理想論かもしれないが・・・)

複合主キーをそのまま使うか、あるいは複合主キー的なキーを作る(ようはJANコードの容量)ことも考慮に入れること。

またサロゲートキーは以下のようなメリットとデメリットを覚えておく必要がある。

サロゲートキーのメリット

  • 結合を使うSQLが比較的簡単になる
  • テーブル間の依存度が薄くなる(複合主キーの場合、もし増えると別のテーブルにも影響度がでる)
  • 3により比較的業務変更に強い
  • データを特定するのがカンタン(複合主キーは煩雑)

サロゲートキーのデメリット

  • 業務と無関係のキーが増える
  • 容量が増える

個人的には一般的なテーブルではサロゲートキーを使って、関連テーブルなどの中間テーブルはナチュラルキーなのかな。。と思ってます。

参考リンク

サロゲートキーと複合主キー

DB設計について考えてみた。ナチュラルキーとサロゲートキーはどちらが良いのか?

主キーを識別用以外に使わない

【DB】 サロゲートキー(代理キー)の初歩

-Database
-,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

集合としてのSQL

今まで何度かSQLが集合ということを扱ってきました。 今回はそれがよくわかる例を。 実務ではあまりないと思うのですが、集合をイメージしやすい例題として、2つのテーブルが全く同じケースを考えます。 下記 …

no image

SQLにおけるナンバリング

本日はナンバリングに関して。 MySQLを使っていますと各テーブルにはid int not null auto_increment primary keyなどと打って主キーを打つことがほぼ習慣になって …

no image

正規化のデメリット

Contents1 正規化のデメリット2 本日のSQL 正規化のデメリット 正規化についていろいろ書いてきましたが、メリットもあればデメリットもあります。 メリットとしては データの不整合が起きにくい …

no image

CASE式のすすめ その2

本日も「達人に学ぶSQL徹底指南書」を地道に進めていきます。 Contents1 CASE式の利用2 UPDATE文のCASE3 テーブル同士のマッチング CASE式の利用 私自身はCHECK制約を使 …

no image

HAVING句の活用 発展編

今回からはまたまたHAVING句です。 下記のようなテーブル(teams)があり、全員が待機状態のチーム(全員がそろっている)を求めます。 member | team_id | status &#82 …