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

サロゲートキーに関して

テーブル設計に関してのメモ。 テーブルを作る時にid int not null auto_increment primary keyを自動的に作ることが多いと思いますが、サロゲートキーといい、グレーノ …

no image

DBUtils活用

普段はJavaEEで開発を行っているのでデータベースへのアクセスはJPAを活用しています。 ただ、JavaEE環境だとglassfish経由でデータベースを動かしているので、glassfishを動かさ …

no image

SQL 更新系に関して

SQL実践入門、残り2章になりましたが、いやーむずいっす。 今回は9章を進めていますがSQLはもともと検索を主な用途として発展したため、SELECT文の使用がメインになります。 ですが、UPDATE文 …

no image

アンチパターン 参照渡しと値渡し+キー情報の設定+同一値を複数テーブルに配置+正規化が不十分+集計表+不適切なステータス値

本日は自分がデータベースの設計をしていて気を付かないといけないなーと思った点などを。 注意点としては設計のミスは実装で取り返しにくいことが多いので極力気を付けましょう。あといろいろなテーブルのパターン …

no image

データベースによるテストデータ作成

テスト環境を作る際に、テストデータを作るのが面倒・・・なんかライブラリでもないかな・・と思っていたんですが、MySQLでいろいろと簡単にできます。 数字 [crayon-6339294cb7fd987 …

アーカイブ