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基礎 条件式はunionよりもcaseで

複雑な条件式があったときにcase式を使うことでパフォーマンスを向上させることができます。 ※一般にunionを使うよりも高速なことが多い。 例1 ある条件により別の列を使いたいとき、 [crayon …

no image

MySQLのパフォーマンスチェックなどについて

常日頃MySQLをつかっているのですがパフォーマンスのチェックなどをあまりしていなかったため、これをチョクチョクしていこうかなあと思っております。 簡単に使えるツール(ただし5.1.4から)としては標 …

no image

JPAでの多対多のリレーション

以前、このエントリーでJPAのリレーションについて説明しました。 今回は多対多について説明します。 Contents1 テーブル構成2 ソース2.1 CDのエンティティ2.2 Artistのエンティテ …

no image

データベース設計のアンチパターン 重すぎるOLTP+Date型不統一+データ量想定が甘い

Contents1 重すぎるOLTP1.1 デメリット1.2 対策2 DATE型の型の不統一2.1 デメリット2.2 対策3 データ量の想定が甘い3.1 デメリット3.2 対策 重すぎるOLTP ※O …

no image

第二、第三の正規化&ER図&Check制約

前回第一正規化を話したので、第二、第三に進んでいきます。 Contents1 第二正規化とは?2 第三正規化とは?3 正規化のメリット4 ER図5 本日のSQLネタ Check制約 第二正規化とは? …