skillup

技術ブログ

Database

サロゲートキーに関して

投稿日:2018年11月24日 更新日:

テーブル設計に関してのメモ。

テーブルを作る時にid int not null auto_increment primary keyを自動的に作ることが多いと思いますが、サロゲートキーといい、グレーノウハウに属します。

本来であれば複合主キーを使ってレコードを特定すべきですが、複合主キー自体にもデメリットがあるので代替案としてこれが使われることが多いです。

メリットとしては

  • リレーションが非常に簡単になる
  • レコードの特定が簡単になる
  • リレーションが(数字を使うので)高速になることが多い。

というメリットがあります。(以前はほぼ自動的に作ってましたね・・・)

  • 元々論理的に存在しないカラムであり、モデルをわかりにくくする

というデメリットがあります。

あとはあるデータベースのデータを別のデータベースのテーブルにコピーなんかするときにこれを使っているとリレーションの際、idが完全一致しないことが多いので、サロゲートキーの書き換えをしないとかなり面倒です・・・

参考リンク

論理設計のグレーノウハウ サロゲートキー

-Database
-

執筆者:


comment

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

関連記事

no image

JPQLでの算術関数

複雑なJPQLを書いていると、通常のレコードの取り出しだけではなく、合計(SUM)や算出(COUNT)などのいわゆる算術関数を使うことが一般的です。 JPQLでもこれらを通常通り扱うことができます。 …

no image

自己結合に関して

以前もこのエントリーで学習しましたが、SQLの結合では自己結合という考え方があります。 下記のようなテーブルProductsがあるとします。 name | price ——&# …

no image

データベース設計のアンチパターン リトライ+バッチ分割+バッチの再利用不可

Contents1 リトライ1.1 デメリット1.2 対策2 バッチ分割2.1 デメリット2.2 対策3 バッチ再利用不可3.1 デメリット3.2 対策 リトライ ※OLTP=オンライントランザクショ …

no image

MySQLのロックに関して+サブクエリ内のupdate

MySQLのロックに関して。 データベースではデータの整合性を保つために読み書きを一時的に制限する仕組みがあります。(データベースだけではないですが・・・) 大きく分けると共有ロック(書き込みは当然だ …

no image

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

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

アーカイブ