データベース設計入門#3 テーブル設計の手順【実戦形式で解説】

せお丸のプログラマー養成講座【サイバーフリークス株式会社】
28 May 202017:44

Summary

TLDRこのビデオスクリプトでは、データベースのテーブル設計のステップを実践的に紹介しています。システム要件の理解、概要設計、詳細設計の3ステップを説明し、テーブルの命名規則や外部キー制約の設定方法を解説します。さらに、ER図の作成と正規化、制約条件やインデックスの設定についても解説しています。このガイドは、データベース設計の基礎を学ぶ初心者から経験豊富なデザイナーまで幅広い層に役立つでしょう。

Takeaways

  • 💡 システムの要件と機能を明確にすることがテーブル設計の第一歩。
  • 📝 テーブル設計は3つのステップで進める: システムの要件把握、テーブルの概要設計、テーブルの詳細設計。
  • 📊 テーブルの概要設計では、主要なテーブルとカラムの一覧をラフスケッチする。
  • 🔄 テーブル名は複数形、カラム名は単数形にする命名規則を守る。
  • 📑 テーブル名やカラム名には予約語を使わないように注意する。
  • 🔧 カラムに型をつける際、VARCHARの桁数は2の累乗数を基本にする。
  • 🛠 すべてのテーブルにID、created_at、updated_atの3点セットを追加する。
  • 🔗 ER図を使って正規化とリレーションの設計を行う。
  • 🛡 制約条件やインデックスを適切に設定し、データの整合性を保つ。
  • 📈 インデックスは検索のキーになるカラムに付けるが、プライマリキーや外部キーには自動で付くので不要。
  • 🔍 NOT NULL制約、ユニークキー制約、外部キー制約を可能な限りつける。
  • 📝 論理削除と物理削除の違いを理解し、システム要件に応じて適切に外部キー制約を設定する。

Q & A

  • テーブル設計のステップは何ステップで構成されていますか?

    -テーブル設計は3つのステップで構成されています。ステップ1でシステムの要件を把握し、ステップ2でテーブルの概要設計を行い、ステップ3でテーブルの詳細設計を行っています。

  • システムの要件を定義する際に重要なポイントは何ですか?

    -システムの要件を定義する際、重要なポイントはクライアントとの要件の打ち合わせを通じて要件と機能を明確にすることです。

  • テーブル設計の概要設計では何を行なう必要がありますか?

    -テーブル設計の概要設計では、テーブルの一覧と主要なカラムをガバッとリストアップし、ラフスケッチを作成する必要があります。

  • テーブル設計の詳細設計では何を行いますか?

    -テーブル設計の詳細設計では、日本語のテーブル名やカラム名を英語に変換し、カラムにデータ型をつけ、ER図を書きながら正規化を行い、制約条件やインデックスを設定することが含まれます。

  • テーブル名やカラム名の命名規則には何がありますか?

    -テーブル名やカラム名の命名規則として、使える文字は半角アルファベット、半角数字、アンダーバーのみ。テーブル名は複数形、カラム名は単数形にし、カラム名は雑な名前ではなく意味のある名前をつけることが挙げられます。

  • 外部キーの命名ルールは何ですか?

    -外部キーの命名ルールは、テーブル名の単数形にアンダーバーをつけ、その後に'id'をつけることです。例えば、'shops'テーブルの外部キーは'shop_id'という命名になります。

  • インデックスをつける目的は何ですか?

    -インデックスをつける目的は、データベースの検索を高速化することです。検索のキーになるカラムや頻繁にアクセスされるカラムに対してインデックスを設定することが一般的です。

  • 制約条件の種類には何がありますか?

    -制約条件にはNotNull制約、Uniqueキー制約、外部キー制約の3つがあります。それぞれ必須入力の確認、重複しない値の保証、関連するテーブルに存在するレコードへの参照を保証するものです。

  • 正規化とは何ですか?

    -正規化とは、データベース設計の過程でデータを重複を避けずに整理し、効率的に保管するプロセスです。正規化はデータの整合性と保守性を高めることを目的としています。

  • データベース設計における予約語とは何ですか?

    -データベース設計における予約語とは、データベースシステムで既に使用されているキーワードのことです。これらの予約語はテーブル名やカラム名として使用されることは避けるべきです。

  • テーブル設計の際に考慮すべき主な要素は何ですか?

    -テーブル設計の際に考慮すべき主な要素は、システムの要件、機能一覧、テーブルの概要と詳細設計、正規化、制約条件の設定、インデックスの適用、命名規則の遵守などです。

Outlines

00:00

📝 テーブル設計の基本手順

この段落では、システムの要件を理解し、テーブル設計の3ステッププロセスを紹介しています。ステップ1ではシステムの要件を把握し、ステップ2では概要設計を進め、ステップ3では詳細設計を行っていくことが説明されています。特に、アマゾンのようなECサイトのテーブル設計を例に、テーブルの命名規則や外部キー制約の設定方法について解説しています。

05:01

🔠 日本語テーブル名の英語への変換と命名規則

ここでは、日本語のテーブル名やカラム名を英語に変換する際のポイントが説明されています。半角英数字とアンダースコアのみを使用し、テーブル名は複数形、カラム名は単数形にすることが推奨されています。また、カラム名には適切な命名規則を用い、予約語を避けるよう注意喚起しています。

10:03

🔄 カラムのデータ型指定と外部キーの設定

この段落では、カラムにデータ型を指定し、外部キーを設定する方法について解説しています。IDカラムは主キーとして自動インクリメントを設定し、作成日や更新日は日付と時間の情報を含むDATETIME型を使用することが推奨されています。また、テーブル間のリレーションをER図で表現し、正規化の重要性を強調しています。

15:05

🔗 外部キー制約とインデックスの適用

最後の段落では、外部キー制約を適切に適用することでデータの整合性を保証する方法について説明しています。また、インデックスを設定して検索効率を高めるポイントや、制約条件を設定する際の注意点についても触れています。ユニークキー制約やNULL許容の制約についても解説しており、物理削除と論理削除の選択肢に応じた設計の重要性を強調しています。

Mindmap

Keywords

💡テーブル設計

データベース設計のプロセスの一部であり、データの保存構造を定義することです。動画では、テーブル設計を3つのステップに分けて進めていく方法を詳細に説明しています。システムの要件を把握し、テーブルの概要設計を行い、最後に詳細設計をする流れが紹介されています。

💡システムの要件

システムが実現する必要がある機能や条件のことです。動画では、ECサイトの例を使ってシステムの要件を明確に定義することの重要性が強調されています。これに基づいてテーブル設計が進められます。

💡概要設計

システム設計の初期段階で、主要なテーブルとそのカラムをラフスケッチで洗い出す作業です。詳細設計を行う前に全体像を把握するために行われます。動画では、シナリオに沿ってテーブルの一覧を作成する方法が紹介されています。

💡詳細設計

システム設計の後半段階で、カラムの型や制約条件などを具体的に定める作業です。動画では、日本語のテーブル名やカラム名を英語に変換し、ER図を用いて正規化を行う手順が説明されています。

💡正規化

データベース設計における手法で、データの冗長性を排除し、整合性を保つためにデータを整理することです。動画では、ER図を用いてテーブル間のリレーションを整理し、正規化を行う方法が示されています。

💡ER図

エンティティ・リレーションシップ図の略で、データベース内のテーブル間の関係を視覚的に表現したものです。動画では、ER図を使ってテーブル間の外部キーの関係や正規化を進める方法が解説されています。

💡外部キー

あるテーブルのカラムが、別のテーブルの主キーを参照するためのキーです。動画では、1対Nの関係においてN側に外部キーを持たせる方法が説明されています。

💡インデックス

データベースの検索性能を向上させるための仕組みです。動画では、検索のキーになるカラムにインデックスを付けることで、検索速度を向上させる方法が紹介されています。

💡制約条件

データベースにおけるデータの整合性を保つためのルールです。動画では、Not Null制約、ユニークキー制約、外部キー制約の3つの主要な制約条件が解説されています。

💡論理名と物理名

データベース設計において、日本語の名前を論理名、英語の名前を物理名と呼びます。動画では、設計段階から物理名で管理することのメリットや、論理名と物理名の使い分けについて説明されています。

Highlights

テーブル設計の3ステップを実践形式で解説。

システムの要件を把握することがテーブル設計のステップ1。

アマゾンのようなECサイトのテーブル設計を例に説明。

機能一覧を定義し、それを基にテーブル設計を進める。

テーブルの概要設計では主要なテーブルとカラムを洗い出す。

シナリオに沿ってテーブルを洗い出す方法を提案。

日本語のテーブル名やカラム名を英語に変換するポイント。

カラム名の命名規則とデータベース予約語の注意点。

テーブルにid、create_at、update_atの3つのセットを追加する理由。

ER図を書きながら正規化を行う方法。

外部キーの命名ルールと1対n関係のテーブル設計。

n対n関係のテーブル設計における中間テーブルの作成。

インデックスの重要性と適用するカラムの選択基準。

制約条件の種類と適用時の注意点。

not null制約、ユニークキー制約、外部キー制約の設定方法。

論理削除と物理削除の選択と外部キー制約の関係。

テーブル設計の最終確認と改善のポイント。

コメント欄へのフィードバックの呼びかけと他の有用な動画の案内。

Transcripts

play00:00

戦までです今回はテーブル設計の手順を

play00:03

実践形式でお見せしますテーブルの命名

play00:07

規則や外部キー制約の貼り方などとても

play00:09

重要なポイントを解説しますので最後まで

play00:12

動画をご覧下さい

play00:14

それではテーブル設計の進め方を説明し

play00:17

ますテーブル設計はこの3ステップで進め

play00:20

ていきますまずは step 1で

play00:23

システムの要件を把握しますそして

play00:26

ステップ2ではテーブルの概要設計を行い

play00:29

ますカラムの型をどうするとかユニーク

play00:32

キーをどうするかとかそういう細かいこと

play00:35

は次の step 3の方でやるので一旦

play00:38

置いといてまずこのステップ2の時点では

play00:41

ガバッと主要なテーブルと絡むの一覧を

play00:44

書き出すラフスケッチの作業を行います

play00:47

そしてステップ3でテーブルの詳細設計を

play00:50

行います

play00:52

それではステップ1としてシステムの要件

play00:55

を把握していきましょう

play00:56

今回はアマゾンのような ec サイトの

play00:59

テーブル設計をやってみます設計の第一歩

play01:02

はシステムの要件と機能を明確にすること

play01:06

です今回はこんな感じでシステムの要件と

play01:10

機能を定義しました今回のシステムの要件

play01:13

としてはアマゾンのような ec サイト

play01:15

ですそして機能一覧を見てみるとまずは

play01:18

フロント画面で商品を検索したり商品の

play01:21

詳細ページを見たりあとはマイページで

play01:24

ログインしたり購入履歴を見たりすること

play01:26

ができますそして商品を販売する側の管理

play01:31

画面ではログインしたり商品の管理をし

play01:34

たりあとは商品にカテゴリーを付けたり

play01:37

することができます

play01:38

こんな感じで設計を進めるステップ1とし

play01:41

てはシステムの要件と機能を明確に定義

play01:46

するところから始めます

play01:48

ここをどう定義するかについては設計云々

play01:51

ではなくてお客さんとの要件の木目の話に

play01:54

なってきます

play01:56

[音楽]

play01:57

システムの要件と機能一覧が定義できたら

play02:00

次はテーブルの概要を設計します

play02:03

このステップ2のフェーズの完成形を先に

play02:06

お見せするとこんな感じになりますカラム

play02:09

の型や制約条件などの細かい設計は後回し

play02:12

にしてとにかくテーブルの一覧と主要な

play02:16

カラムをがバッド下記出せれば ok です

play02:19

ツールは excel がオススメですが

play02:20

ノートに手書きでも全然 ok です

play02:23

では実際にやってみましょう

play02:26

まずはテーブルの一覧を洗い出していくの

play02:28

ですがやみくもに思いつきで書き出して

play02:30

いくやり方だと必ず考慮漏れ設計漏れが

play02:34

発生してしまいますではどうやって進める

play02:37

のかというと先ほどの機能一覧を見ながら

play02:41

シナリオに沿ってテーブルを書き出して

play02:43

いきます

play02:44

では一緒に行ってみましょうこの機能一覧

play02:46

を見ながらシナリオを思い浮かべてみ

play02:48

ましょう

play02:49

この機能一覧では商品検索機能が一番上に

play02:53

表示されていますがまだ商品が1軒も登録

play02:55

されていないので先に商品を登録する筆が

play02:59

ありますですのでシナリオで考えるときは

play03:02

上から順番に見ていけばいいというもので

play03:04

はなくてシナリオ頭に思い浮かべますこの

play03:07

場合はまずは管理者としてログインをして

play03:10

商品を登録してこちらの方から見ていき

play03:14

ますそれでは管理者が商品を登録すると

play03:17

いうシナリオをまずは考えてみますおっ

play03:20

はじめにログインを行うためのテーブルが

play03:22

必要になります

play03:23

ですのでまずは店舗テーブルを用意し

play03:25

ましょう

play03:26

ここに店舗名とメールアドレスと

play03:28

パスワードを持たせて店舗の管理者がログ

play03:31

インを行います

play03:32

次に商品や商品のカテゴリーを管理する

play03:36

ためのテーブルも必要になります

play03:37

ですので商品テーブルと商品カテゴリー

play03:40

テーブルを追加します

play03:42

次は一般ユーザーの使うフロント画面の方

play03:45

のしなりを見ていきましょう

play03:47

まずは商品検索や商品の詳細ページですが

play03:51

これは先ほど管理者が登録した商品

play03:53

テーブルを使って行いますですので新しい

play03:56

テーブルの追加は必要ありません次に my

play03:59

ページでログインしたり購入履歴を見たり

play04:02

することができますこれを行うために

play04:04

ユーザー様のログイン情報テーブル

play04:06

users テーブルというのを追加し

play04:08

ます

play04:09

そして購入履歴テーブルも用意しますはい

play04:12

こんな感じでシナリオを思い浮かべながら

play04:15

思いつく限りのテーブルと絡むの一覧を

play04:17

洗い出していきます

play04:19

これで step 2の概要設定は完了

play04:21

です

play04:23

最後により詳細な設計を行っていき

play04:26

ましょう

play04:27

この最終フェーズではこの4つの作業を

play04:29

行っていきます

play04:30

まずは step 1ですが日本語の

play04:32

テーブル名やカラム名を英語に変換します

play04:36

次の3-2ではカラムに方をつけていき

play04:39

ますそして3-3では er 図を書き

play04:42

ながら正規化を行っていきます

play04:45

正規化について分からないという方は前回

play04:47

の動画で説明していますのでそちらの動画

play04:49

をご覧下さい

play04:50

動画の url は概要欄に貼っておき

play04:52

ますそしてさんの選んでは制約条件や

play04:56

インデックスをつける作業していきます

play04:58

それでは一つずつ順番にやっていき

play05:00

ましょう

play05:02

[音楽]

play05:03

まずは日本語のテーブル名やカラム名を

play05:05

英語に変換します

play05:07

では実際にこの日本語のテーブルを英語に

play05:10

変換するとこうなります

play05:13

英語に変換する際のポイントとしては

play05:15

こちらの命名規則を参考にしてください

play05:19

まず1点目ですが使える文字は半角

play05:21

アルファベット半角数字アンダーバー

play05:24

この3つだけですそして2点目ですが

play05:27

テーブル名は複数形カラム名は単数形にし

play05:31

てください

play05:32

例えば商品テーブルの場合はアイテム

play05:35

テーブルではなくてアイテムズテーブルに

play05:37

なりますテーブル名は複数形だからです

play05:40

そして絡むはすべて単数形になっています

play05:43

例えばこちらのストックという在庫を表す

play05:47

絡むですがこちらは複数形ではなくて単数

play05:50

形のストックになっていますしています

play05:53

このように他のテーブルを見てもテーブル

play05:55

名は複数形から部は単数形

play05:59

テーブル名は複数形絡むは単数形とこの

play06:03

ような命名規則になっています

play06:05

そして命名規則の3点目ですがよくやり

play06:07

がちな水なのですが

play06:09

カラム名はテキスト1テキストにのような

play06:12

雑な名前にしないでください

play06:14

それぞれ意味があるはずなのでちゃんと

play06:17

このように一目で見て意味がわかるような

play06:19

カラム名をつけましょうなお日本語の名前

play06:21

を論理名

play06:23

英語の名前を打つ決めと言いますのでこれ

play06:25

も覚えておきましょう

play06:27

論理名と物理目両方を20管理するのは

play06:30

コストがかかるので慣れてきたら設計段階

play06:33

から打つ姫1本で管理しても良いかと思い

play06:36

ます

play06:37

そしてもう1点

play06:38

データベースには予約語というものがあり

play06:40

ます

play06:41

岐阜塗るリミットデートなどこれらの言葉

play06:44

はテーブル名やカラム名として以前に別の

play06:48

意味を持っていますそしてこれらは

play06:50

データベースの世界ではようやく号と呼ば

play06:52

れています

play06:54

これらの言葉をテーブル名やカラム名に

play06:56

使ってしまうと sql で構文エラーが

play06:59

発生するなど面倒なことが起こりますので

play07:01

予約後はテーブル名やカラム名としては

play07:04

使わないようにしましょうろ約5このほか

play07:07

にもたくさんありますのでデータベース

play07:10

予約語で検索して一覧を何となく頭に

play07:13

叩き込んでおきましょう

play07:16

次に絡むに方をつけていきましょう

play07:18

なおここからは excel だと作業し

play07:20

にくいので mysql

play07:22

workbench という無料のツール

play07:24

を使います

play07:25

ツールの詳細は概要欄に貼っておくので

play07:27

使ってみてくださいでは早速解説していき

play07:30

ます

play07:31

カラムに方をつけた結果がこちらになり

play07:33

ます

play07:34

例えばアイテムズテーブルのネーム絡むの

play07:36

方はバーチャルのに午後といったように

play07:39

絡むに方をつけていきます津波にこの

play07:42

250号という数字には意味があるので

play07:45

覚えておきましょう

play07:46

こちらがバーキャラの桁数を付ける時の

play07:48

ルールですバーチャルの桁数は

play07:52

24816といったように2の累乗数を

play07:56

つけましょう

play07:57

ただしこの256という数字だけは250

play08:01

語に直してください

play08:03

なぜかというと桁数が256以上だと

play08:06

インデックスが張れなくなるからですです

play08:09

のでバーキャラの桁数を決定するときは

play08:11

基本的には2のルー上水にしつつも二ゴロ

play08:14

だけはに午後に変換するというふうに覚え

play08:17

ておきましょうなお桁数はちょっと余裕を

play08:19

持たせた桁数にしておくのが良いと思い

play08:21

ますそしてもう一点皆さんお気づきかも

play08:23

しれませんがどのテーブルにも

play08:26

id クリエイテックと at up デー

play08:28

テッド at この3点セットを追加して

play08:31

ありますこちらのテーブルにも id

play08:34

グレーペット at updater っと

play08:36

こちらのテーブルにも id と

play08:38

クリエイト後 up デーテッド at

play08:41

こちらのテーブルにもこの3点セット

play08:43

こちらのテーブルにもこの3点セット

play08:45

このようにすべてのテーブルに id

play08:47

クリエイターとアップでデッドの3点

play08:49

セットを追加してありますまず id に

play08:52

ついてですがこちらはプライマリキー

play08:54

つまり主キーになりますそしてかたは員と

play08:57

形で auto increment を

play08:59

設定してください

play09:00

そして名前は id にしてください

play09:03

ショップ id のような変な名前にし

play09:05

ないでください次クリエイテックと at

play09:08

と up デーてっと後ですがこちらは

play09:10

作成1更新日になります

play09:13

方はデートタイム型を指定してください

play09:16

そして名前ですがクリエイテックとでー

play09:19

とーとか up デーテッドデー等では

play09:21

なくてなんとか at

play09:23

命名してくださいこちらのデートタイム型

play09:26

の場合は日付の情報だけではなくてタイム

play09:29

つまり時間まで含めることができる方です

play09:33

この2つのカラムはデートタイムがだです

play09:35

ので名前もなんとかデートではなくてなん

play09:38

とか at というふうに命名するように

play09:40

しましょう

play09:41

以上の内容を踏まえるとここまででこの

play09:44

ような設計内容となっています次の

play09:46

ステップではこれらのテーブルに

play09:48

リレーション関係をつけながら er 図

play09:50

を書いていきます

play09:52

[音楽]

play09:54

それでは er 図を書きながら外部キー

play09:56

を追加していきましょう最終形態としては

play09:59

こんな感じになります

play10:00

まずはショップ stable と

play10:02

アイテム stable を見ていき

play10:03

ましょう

play10:05

一つの店舗は複数の商品を持ちます

play10:08

このように1対 n の関係の時は n 側

play10:12

にショップ id のような外部キーを

play10:15

追加します

play10:16

この外部キーの命名ルールはテーブルの端

play10:20

すーげーアンダーバー id にします

play10:23

ですので今か大和 shops テーブル

play10:26

の関数型なのでショップそれにアンダー

play10:30

バー id をつけてショップ id と

play10:31

しています shops id のような

play10:34

複数形にはしないで下さい

play10:37

先ほど primary key の

play10:39

こちらの id の方の姉名ルールを説明

play10:41

した時はショップ id のような命名で

play10:43

はなくて単純

play10:45

に id という名前にしてくださいと

play10:46

言いましたがこのように外部キーの場合は

play10:49

ショップ id のような名前になります

play10:52

もう一つ1対 n の関係を見てみ

play10:54

ましょう

play10:55

ユーザー度テーブルとパーチェス

play10:57

history ず底部です

play10:59

ユーザーズテーブルというのはユーザーの

play11:01

テーブルです

play11:02

そしてパーチェス history ずで

play11:04

ブルは購入履歴テーブルです1人の

play11:07

ユーザーは複数の購入履歴を持ちますので

play11:10

1対 n の関係になります1地帯 n の

play11:14

関係の時は n 側に外部キーを持たせる

play11:17

という話でしたのでユーザーは id を

play11:19

ここにも出せています

play11:21

この名前はユーザーズテーブルを単数形に

play11:24

したユーザー

play11:26

それにアンダーバー id をつけて

play11:27

ユーザー id とこのような命名ルール

play11:30

に従っていますそして購入履歴テーブルに

play11:33

は購入した商品の id を持たせたく

play11:36

なりますが商品を複数

play11:39

購入することのことを考えるとこちらの

play11:41

購入履歴テーブルにアイテム id を

play11:44

持たせるのではなくて購入履歴明細

play11:47

テーブルとして切り出した上でこちらに

play11:50

商品のアイテム id を持たせる方が

play11:52

良いでしょう

play11:54

ですので購入履歴テーブルから購入履歴

play11:57

明細テーブルを1対 n の関係で

play12:00

切り出して正規化しています

play12:02

そしてこちらの購入利益迷彩テーブルと

play12:05

アイテムテーブルを1対1のリレーション

play12:07

を張っていますこのように er 図を

play12:10

引きながら

play12:11

正規化するという作業も行っていきます

play12:14

最後に商品カテゴリと商品テーブルの関係

play12:18

ですがここは n 対 n の関係になり

play12:21

ます n 対 n 場合は中間テーブルを

play12:24

作ってこのように中間テーブルに外部キー

play12:27

を持たせますアイテムズセーブルに対して

play12:30

のアイテム id アイテムカテゴリーず

play12:33

テーブルに対してのアイテムカテゴリー

play12:34

id をこのように持たせます

play12:38

最後に制約条件やインデックスをつけて

play12:41

いきます

play12:41

まずインデックスですがインデックスとは

play12:44

検索を早くするためのものですどういう

play12:47

カラムにインデックスをつけるかというと

play12:49

検索のキーになるカラムに付けます津波に

play12:53

プライマリティーや外部キーには付けなく

play12:55

て ok です

play12:56

なぜならば自動で作っからです

play12:59

それでは今回のケースを見ていきましょう

play13:01

今回の要件を考慮すると

play13:03

商品検索という機能があります

play13:06

これは商品名で検索する機能ですので

play13:09

アイテム stable の name

play13:12

このカラムにインデックスを貼りましょう

play13:15

今回の場合はこれだけで ok です最後

play13:17

にテーププールに制約をつけましょう

play13:20

成約にはこの3つがあります not

play13:23

null 制約

play13:24

ユニークキー制約

play13:25

外部キー制約です

play13:27

この3つの制約は可能な限りつけるように

play13:31

しましょうそれでは1つずつ解説していき

play13:33

ますまずは not null 制約です

play13:36

今回の場合全て必須入力項目ですので

play13:40

すべてのカラムに not null を

play13:42

つけます

play13:43

このようにつけられるものなら可能な限り

play13:46

制約をつけるようにしましょう

play13:47

では逆にどういう時に not null

play13:49

制約をつけないかというと例えば購入履歴

play13:53

テーブルにメモのような絡むがあったとし

play13:56

ますメモというのは例えば備考として領収

play13:59

書をくださいといったようなあってもなく

play14:01

てもどちらでも良いような絡むですこう

play14:04

いった場合は not null では

play14:06

なく塗る許可となります次にユニークキー

play14:09

制約について解説します

play14:12

ユニークキー制約とは値が重複しないこと

play14:16

を約束する誓約です

play14:18

重複しない項目には可能な限りユニーク

play14:21

制約を貼りましょう

play14:22

今回の場合はまずは商品カテゴリーの

play14:25

カテゴリ名です例えばお酒とか衣料品と

play14:29

いった商品カテゴリの名前が重複して登録

play14:32

されるのは防ぎたいので今回は商品

play14:35

カテゴリ名

play14:36

つまりアイテムカテゴリーずテーブルの

play14:39

name このカラムにユニークキー制約

play14:41

を貼ります次に商品名

play14:44

これも重複して登録されるのは防ぎたいの

play14:47

でアイテムずテーブルの name この

play14:50

カラムにユニークキー制約を貼ります

play14:52

最後に店舗の名前

play14:54

これも重複してはいけない項目なので

play14:57

shops テーブルの name この

play14:59

カラムにユニークキー制約を貼ります

play15:01

一方でユーザーテーブルのネームこれは

play15:05

同姓同名がありえるのでユニークキー制約

play15:08

は貼りません最後に外部キー制約について

play15:11

解説しますん

play15:12

外部キー制約とは relation 先

play15:15

にレコードがあることを保証する誓約です

play15:19

これも可能な限り制約をつけるようにし

play15:21

ましょう

play15:22

今回の場合だと外部キーになっているから

play15:24

6これらには全て外部キー制約を貼ります

play15:27

例えばユーザー id とかパーチェス

play15:30

history id 後はアイテム id

play15:33

とかショップ id これらはすべて外部

play15:36

キーですので外部キー制約を張って

play15:39

リレーション先にレコードがあることを

play15:42

保証しますただし購入履歴テーブルの

play15:45

ユーザー id このケースを考えてみ

play15:47

ますもしもユーザーが退会した時に

play15:50

ユーザーの情報を論理

play15:52

削除するのか移り削除するのかによって

play15:55

外部キー制約の貼り方が変わってきます

play15:59

物理削除というのはレコード本当に削除

play16:02

するやり方なので外部キー制約が保てなく

play16:05

なります一方で論理削除というのは

play16:08

ユーザーテーブルに削除フラグを設けて

play16:11

論理的に削除するやり方なので外部キー

play16:14

制約は保てますこの論理削除なのか物理さ

play16:19

ことなのかについては個人情報の保護方針

play16:22

など設計以前にシステム要件が絡んでくる

play16:25

部分ですので

play16:27

クライアントに確認をとって要件を改めて

play16:30

整理しながら適切な設計にしましょう

play16:32

[音楽]

play16:35

では今回のまとめですテーブル設計はこの

play16:38

3ステップで行いましょう

play16:40

まずはステップ1としてシステムの要件を

play16:43

把握します

play16:44

設計の第一歩はシステムの要件と機能を

play16:47

明確にすることからでした

play16:50

次にステップにとしてテーブルの概要を

play16:53

設計しますここはやみくもにテーブルを

play16:57

洗い出すのではなくてシナリオに沿って

play16:59

アライドするのがポイントでした

play17:01

最後のステップ3でテーブルの詳細を詰め

play17:05

ていきますステップ3は4段階あってまず

play17:08

は日本を英語に変換します

play17:11

次に絡むに方をつけていきます

play17:14

次に er 図を書きながら正規化も行っ

play17:17

ていきます

play17:18

そして最後に制約条件やインデックスを

play17:21

つけていきますはい今回はテーブル設計の

play17:24

手順を解説しました設計のやり方について

play17:27

は異論や反論

play17:28

違う考え方もあると思いますのでコメント

play17:31

欄に書き込みいただけたら嬉しいですまた

play17:33

この動画が役に立ったという方は高評価の

play17:36

グッドボタンそして sns や友達への

play17:38

共有もお願いしますこうチャンネルでは他

play17:40

にも役に立つ動画を配信していますので

play17:42

ぜひそちらも覗いてみてください

Rate This

5.0 / 5 (0 votes)

Related Tags
データベース設計要件定義テーブル設計正規化制約設定ER図インデックス外部キーユニークキーSQL
Do you need a summary in English?