かっちゃんのプログラミング奮闘記

このブログは、僕がプログラミング学習をしていく上で、知識のインプットを図るためのアウトプット場所として活用している場所です。

【書籍】達人に学ぶDB設計徹底指南書を読んで学んだこと【第4章】

第4章 ~ ER図に関する内容~

3種類の関係

テーブル同士の関係には以下の3種類がある

  • 1対1
  • 1対多
  • 多対多

基本的に1対1の関係は正規化する必要がなく、1対1の関係なら同じテーブル内に情報を入れてやれば良いので、1対1の関係の時は正規化しなくて良い。

正規化が必要なのは、1対多と多対多の関係の時。

1対多

社員テーブルに会社コード(主キー)と社員ID(主キー)と社員名があり、会社テーブルに会社コード(主キー)と会社名が@とする。

1つの会社に対して複数の社員が働いていることが想定される為、この場合は、会社が「1」で社員が「多」になる。

💡ポイント

RDSの場合、多対多の関係性を作ってはダメみたいです。
後ほど多対多の場合でも関係性を作っても良い解消方法を書くので、下記を読んでみて。

ER図の書き方

ER図を書くときはIDEFIXと言う表記法やIE表記法がある。
個人的に馴染みのあるのはIE表記法かな。
IDEFIXは細かく表記できる様だけど、IE表記法より書くのが複雑で理解字すらいみたい。

外部キー

他のテーブルの主キーを参照するキーを外部キーと呼び、表記法ではFK(foreign key)と呼ばれる。
良く「foreigin_key」とRailsで見かけるが、あれは外部キーのことを表していたらしい。

f:id:kazuki13070311:20210716233041p:plain
IE表記法

1対多の関係性の時に0人やNULLのが存在する可能性がある場合は「O」を使用する。

1対多の関係性で通常のNULLがない場合は鳥の足みたいなので書く。

多対多

上述した通り、基本的にRDSでは多対多の関係性は作ってはダメ。
しかし、それを解消する方法があり、人為的に多対多を実質解消することができる。

それは中間テーブルを作成してやること。

※中間テーブルは外部キーのみが格納されたテーブルのこと

f:id:kazuki13070311:20210717001035p:plain
多対多(アンチパターン

💡中間テーブルを作れば多対多は解消される

それぞれの主キーを持った中間テーブルを作成して、その中間テーブルと「多」のテーブルを関連付けて、1対多の関係性に無理やりしてやることで、RDSでの多対多の問題は解消される。

この多対多を解決する為の手段のことを「関連実態」(associative entitiy) と言うらしい。

中間テーブルにそれぞれ多対多の関係の主キーを入れて、その中間テーブルとそれぞれのテーブルで1対多の関係にする。

f:id:kazuki13070311:20210717002644p:plain
中間テーブル

中間テーブルには外部キーのみが格納されている。