2021/12/14
LaravelではDBを扱うので当然DBの設計作業も行います。
DBの設計とはデータベースによってデータを管理できるように,現実の世界を抽象化してデータモデルを作成していく作業のことです。
データモデルを作成していく作業(データモデリング)は,一般的に
という3つの段階を通して行われます。
このうち、論理設計ではテーブルごとの関係(リレーション)について考えて設計をすることです。
今回はこのリレーションについてのエントリーです。
概念設計・・・DBの対象とするものを現実の世界から抽出して概念モデルを作成します。
論理設計 ・・・概念スキーマを定義します。 (正規化、ER図の作成)
物理設計・・・論理設計の結果を受けて、データを格納するための物理的な領域や格納方法を決めます。(テーブルの定義)
リレーションについて
DBにおけるリレーションとはテーブル同士の関連のことです。
正規化(データを整理する)を行う上でまずはこのリレーションについて理解しなければいけません。
1対多
「1対多」の関係は最もよくあるリレーションです。
例えば「学生」テーブルと「メールアドレス」テーブルがあるとします。
この例では「学生」テーブルの一行が「メールアドレス」テーブルの複数の行と関連していることがわかります。
これを「1対多」の関係とよび、親子関係が成立します。
多対多
例えば「学生」と「履修項目」との関係について考えてみましょう。
1人の学生は複数の科目を履修します。
またひとつの科目は複数の学生によって履修されることになります。
つまり、「学生」と「履修科目」の関係は "多対多" の関係になります。
通常、多対多の関係では、学生と科目の関係を表す中間テーブルが必要になります。
中間テーブルでは誰がどの科目をとっているのか、あるいはどの科目は誰にとられているのか一覧できるようにします。
中間テーブルを置くことで「1対多」の関係にします。
これを正規化と言います。
正しい正規化とは
正規化とはデータを扱いやすいようにするために整理することです。
正しい正規化とはテーブル間のレコードが「1対多」の関係になるようにします。
もしもテーブル間のレコードの関係が,「1対1」だったり,「多対多」である場合は正しい正規化ではありません。
「1対1」ならテーブルを分割した意味がありません。
「多対多」ならテーブルをもう一つ追加して二つの「1対多」の関係に分割できます。
DBのリレーションについては以上です。
Udemyを使ったLaravel学習方法
仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。