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

ユニークキーの設定

MySQLでのユニークキーの設定に関して。 ユニークキーの設定は下記の通り。

ユニークキーを作成した後に確認するのは下記コマンドで。 …

no image

MySQLのレプリケーションについて

MySQLのレプリケーションについて調べたことなどを。 Contents1 レプリケーションの基礎知識1.1 定義1.2 構成1.3 メリット1.3.1 参照性能の向上1.3.2 可用性の向上1.4 …

no image

SQL結合 サブクエリに関して

今回はサブクエリに関してです。 もちろんSQL実践入門を読み進めています。 SQL上ではテーブル、ビュー、サブクエリというのは機能的にはそれほど変わらず主にパフォーマンスの点で違いがでてきます。 以下 …

no image

サブクエリ 移動平均など

前回の応用編です。 日付、入出金、残高はできましたが、ここからさらに、現在のレコードから3行以内(3行あれば3行、なければそれ以内でできるだけ)のレコードの合計値を出す計算を考えます。 結果だけ先に書 …

no image

ER図作成ツールについて(Mac版)

ER図作成ツールについてMacで色々と調べましたので、メモを。 フリー限定で。 ちなみにwindowsを使っていればA5:SQLが一番使えるかと思います。 以前も下記リンクで説明させていただきました。 …

アーカイブ