データベースのテーブル設計をするとき、ER図とIE記法の書き方を知っていると、他のエンジニアと共通認識を持てます。
テーブル同士の関係性を可視化できるので、設計の確認にも役立ちます。
鳥の足などの記号の意味も紹介します。
先に結論を書くと、ER図の線の端に付く「鳥の足(3本に分かれた線)」は「多」を表します。相手側が「|(1)」なら1対多、両端が鳥の足なら多対多です。「○」は0件もありうることを示し、鳥の足と組み合わせた「○と鳥の足」は「0以上」、「|と鳥の足」は「1以上」という意味になります。
ER図とは
ER図とは、テーブル(エンティティ)の関係を可視化するための代表的な記法です。
ER図を使うと、正規化を行ったあと、テーブル同士の関係性を具体的に可視化できます。
正規化については、Web開発者が知っておくべきテーブル設計の正規化手順を参考にしてみてください。
ER図では、横線で区切って表の属性を二分割します。
上にあるものが主キー、下にあるものが主キー以外の属性です。
外部キーには「FK」と添えることが多く、線の端の記号で「何件と何件が結びつくか」を表します。
IE記法
IE記法(Information Engineering)は、ER図において、テーブルの関係を表す代表的な記法です。
テーブル同士のレコード数は、カーディナリティと呼びます。
- 鳥の足(三本線):多
- ○:0
- |:1
線の端には記号を2つ重ねて書き、テーブルに近い側が「最大(1か多か)」、遠い側が「最小(0か1か)」を表します。よく使う組み合わせは次の4つです。
| 端の記号 | 読み方 | 意味 |
|---|---|---|
| | | | 1(ちょうど1) | 必ず1件だけ対応する |
| ○ | | 0または1 | 対応しないこともある |
| | 鳥の足 | 1以上 | 最低1件、複数ありうる |
| ○ 鳥の足 | 0以上 | 0件のこともあり、複数ありうる |
たとえば、商品テーブルと在庫テーブルの関係を考えます。1つの商品に対して、在庫テーブルの行(店舗ごとの在庫)は複数ありえるので、在庫テーブル側の端に鳥の足を書きます。
在庫が1件もない商品もありうるなら、鳥の足に○を添えて「0以上」にします。
鳥の足と○を併用したときは0以上を意味するので、1を表す|は書きません。
逆に、在庫テーブルから商品を見ると、1行の在庫は必ず1つの商品にしか属さないので、商品テーブル側の端は| |(ちょうど1)です。
この「商品 1 対 在庫 多」の形が、いちばんよく出てくる1対多の関係です。
多対多は中間テーブルで表す
両端が鳥の足になる多対多(たとえば学生と講義)は、リレーショナルデータベースではそのまま実装できません。ER図の段階で、両方の主キーを持つ中間テーブル(受講テーブルなど)を置き、「学生 1 対 受講 多」「講義 1 対 受講 多」の2本の1対多に分解します。
ER図を描いたあとに実際のテーブルへ落とし込む考え方はMySQLの実践的なテーブル構成方法、CREATE TABLEで外部キー制約を書く手順はMySQL DDLの書き方で解説しています。