MySQL データベースの制約とデータ テーブルの設計原則

MySQL データベースの制約とデータ テーブルの設計原則

1. データベースの制約

1.1 はじめに

名前が示すように、データベースの制約は、データベースに挿入されるデータに対する制限です。その目的は、データの有効性と整合性を確保することです。 これにより、データベース内のデータの品質が大幅に向上し、データベースのスペースとデータの呼び出し時間が節約されます。

以前、MySQL のデータ型を紹介しました。データ型は実際にデータの一部を検証することができます。制約についても同様であり、一部のデータの検証も可能です。これにより、違法なデータを回避できます。

1.2 制約の種類

一般的な制約の種類は次のとおりです。

  • not null : 列にnull値を格納できないことを示します
  • unique : 列内の各行が一意の値を持ち、重複がないようにする
  • default : 列に値が割り当てられていない場合のデフォルト値を指定します
  • primary keyキー: 主キーを表します。これは、 not nulluniqueの組み合わせです。列(または列の組み合わせ)に一意の識別子があることを保証すると、テーブル内の特定のレコードをより簡単にすばやく見つけることができます。
  • foreign key : あるテーブルのデータが別のテーブルの値と一致するという参照整合性を保証します。
  • check : 列内の値が指定された条件を満たしていることを確認します。 MySQLデータベースの場合、チェックを使用できますが、使用結果は無視されます。

1.3 ヌルではない

not nullが使用されている場合、デフォルトでnullを挿入できることを意味します (つまり、この列の値は空白のままにすることができます)

ただし、アンケートによっては必須項目があります。この場合、これらのオプションは空にできないため、not null を使用できます。

例:

1.4 ユニーク

uniqueを使用しない場合、異なる行の列の値が繰り返される可能性があります。

しかし、現実の世界では、例えばIDカード番号や電話番号などは実際には一意の値なので、 uniqueを使うことができます。

例:

知らせ:

列にunique制約がある場合、挿入前に検索が実行されます。挿入する値が存在しない場合は、挿入されます。そのため、ユニークを使用すると実際には効率に影響しますが、一般的に言えば、メリットがデメリットを上回ります。

1.5 デフォルト

列のデフォルト値を指定するためにdefaultを使用しない場合、デフォルト値はnullです。列のデフォルト値を変更する場合は、defaultを使用できます。

例:

1.6 主キー

primary key 、not null と unique を同時に使用するのと同じです。

例:

知らせ:

  • テーブルには主キーを 1 つだけ設定できます。
  • 主キーは複数の列を組み合わせて形成できる

補足: 自動増分 - auto_increment

MySQL は各行に次の利用可能な番号を自動的に割り当てることができるため、行を追加するときに一意の値を手動で割り当てる必要がなくなります (手動で実行できます)。ただし、テーブルを作成するときに使用する必要があります。例:

注意:自動増分と手動割り当てを組み合わせて使用​​する場合、一意の値は必ずしも順序どおりになるわけではありません。

1.7 外部キー

外部キーは、別のテーブルの主キーまたは一意の値を関連付けるために使用できるforeign key制約です。

たとえば、Taobao で買い物をする場合、データベースには製品テーブルと注文テーブルの 2 つのデータ テーブルがあり、両方のテーブルに製品番号を含めることができます。注文テーブルの製品番号は、製品テーブルに存在する場合にのみ表示されます。したがって、外部キーを使用して、異常なデータが表示されないように制限することができます。

例:

効果:

外部キー制約は、2 つのテーブルを結合します。制約されるテーブルは子テーブルと呼ばれ、他のテーブルを制約するテーブルは親テーブルと呼ばれます。子テーブルの列に挿入される値が、親テーブルの関連する主キーまたは一意の値に存在しない場合、挿入は失敗します。

注:外部キー制約により、親テーブルのレコードが直接削除されるのを防ぎます。では、親テーブルのレコードを削除する場合はどうすればよいでしょうか? (例えば商品を削除すると商品番号も消えてしまいます)

解決策:論理的な削除 (データベース レコードを直接削除せず、外部キー制約を破らない)

レコードが有効か無効かを示す新しいフィールドを製品テーブルに導入します。このフィールドのデフォルト値は 1 に設定でき、これは有効を意味します。この製品を削除する場合は、このフィールドを 0 に変更すると、製品は無効になります。

1.8 チェック

check制約は、列に入力できるデータを指定します。たとえば、性別は男性または女性としてのみ入力できます。

知らせ:

MySQL はまだこの制約をサポートしていません。 使用したとしても、この制約の効果は無視されます。

例:

2. データベーステーブルの設計

基本的なデータベース操作方法を習得した後、テーブルをゼロから構築する操作に直面した場合、必要なエンティティとそれらの間の関係をしっかりと把握している必要があります。

エンティティ間の関係には、主に 4 つの種類があります。

  • 関係なし
  • 1対1の関係
  • 1対多の関係
  • 多対多の関係

2.1 1対1の関係

たとえば、学生はシステムのユーザー ID に対応しており、次の 2 つの設計方法があります。

学生情報とユーザー情報を1つのテーブルにまとめる

学生証生徒名ユーザー名ユーザーパスワード
2001張三3人の赤ちゃん***
2002李思4人の子供***
2003王武5人の赤ちゃん***

学生をテーブル A に、ユーザー情報をテーブル B に入力します。テーブル B では、学生 ID を挿入して、学生とユーザーを関連付けることができます。

テーブル:

学生証生徒名
2001張三
2002李思
2003王武

表B:

ユーザー名ユーザーパスワード学生証
3人の赤ちゃん*** 2001
4人の子供*** 2002
5人の赤ちゃん*** 2003

2.2 1対多の関係

たとえば、中学生とそのクラスの間には、一般的に 1 対多の関係があります。生徒は 1 つのクラスのみに所属でき、クラスには複数の生徒を含めることができます。

通常、生徒情報を格納するテーブルAとクラス情報を格納するテーブルBの2つのテーブルを設計し、生徒情報にクラスを追加して関連付けることができます。

表A:

学生証生徒名クラスID
2001張三1
2002李思1
2003王武2

表B:

クラスIDクラス名
1シニア3(1)
2シニア3(2)

2.3 多対多の関係

たとえば、大学生とコースの間には多対多の関係があります。学生は複数の異なるコースを受講でき、コースには選択できる学生が多数いる場合があります。

今回は、学生情報を格納するテーブル A、コース情報を格納するテーブル B、学生とコースを結び付けるテーブル C の 3 つのテーブルを設計します。

表A:

学生証生徒名
2001張三
2002李思
2003王武

表B:

コースIDコース名
1上級数学
2大学物理学
3データベース理論

C テーブル:

学生証コースID
2001 1
2001 2
2002 1
2002 3
2003 1

これで、MySQL データベースの制約とデータ テーブルの設計原則に関するこの記事は終了です。MySQL データベースの制約とデータ テーブルの設計の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL で外部キー制約を作成および削除する方法
  • MySQL に外部キー制約を追加する具体的な方法
  • MySQLデータベースで外部キー制約を使用する必要があるかどうかの詳細な説明
  • MySQL 学習: データベース テーブルの 5 つの主要な制約を初心者向けに詳しく説明します
  • MySQL の 6 つの一般的な制約タイプの詳細な説明
  • MYSQLの主キー制約とユニーク制約の違いについて簡単に説明します。
  • MySQL 制約の超詳細な説明
  • MySQL の null 制約のケースの説明
  • MySQLデータベースのテーブルに制約を設定する方法

<<:  HTML はモバイル上で固定フローティング半透明検索ボックスを実装します

>>:  オンデマンドで Vue コンポーネントを自動的にインポートする方法

推薦する

LeetCode の SQL 実装 (184. 部門内で最も高い給与)

[LeetCode] 184. 部門最高給与従業員テーブルにはすべての従業員が保存されます。すべて...

Linux での中国語入力方法の問題を素早く解決する

背景: 最近、資産報告関連の機能に取り組んでおり、中国語入力をサポートする必要があります。通常のショ...

ウェブデザインの経験とスキルの概要

■ ウェブサイトのテーマ計画 ウェブサイトのテーマが断片化しすぎないように注意してください。一般的に...

MySQL 8.0.23 無料インストールバージョンの設定詳細チュートリアル

最初のステップは、MySQL 8.0.23の無料インストールバージョンをダウンロードすることです。 ...

CSS3 で transform を使用した場合のフォントぼかしの解決方法の詳細な説明

この質問は非常に奇妙なので、あまり多くを語らずにコードに直接進みます。 .g-ダイアログラッパー{ ...

HTML に FLASH へのリンクを追加し、すべての主要ブラウザと互換性を持たせる方法

まずコードを見てみましょうコードをコピーコードは次のとおりです。 <div style=&qu...

CSSは高さと幅を固定した要素の比例表示効果を実現します

padding-top パーセンテージを使用すると、固定幅と比例した高さの表示を実現できます。現在の...

Dockerコンテナ間の通信と外部ネットワーク通信の操作

コンテナ間の通信1. コンテナのネットワーク共有このモードの Docker コンテナはネットワーク ...

DockerでMySQLコンテナを作成する簡単な手順

序文すでに Docker をインストールしており、Docker について簡単に理解しています。ここで...

Win10 MySQLでCSVをエクスポートする2つの方法

Win10 で csv をエクスポートする方法は 2 つあります。1 つ目はツールを使用することです...

jsネイティブ構文プロトタイプ、__proto__、コンストラクタの徹底的な理解

目次1 はじめに2 前提条件2.1 データ型2.2 それが自身のプロパティであるかどうかを判断する ...

Windowsタイムサーバーの設定方法の詳しい説明

最近、会社のサーバーの時間が不正確で、外部の時間ソースと同期できないことがわかりました。会社はドメイ...

Linux環境でのDockerインストールチュートリアル

1. 設置環境Dockerは次のCentOSバージョンをサポートしていますCentOS 6.5 (6...

基本的なウェブページパフォーマンス最適化ルールの簡単な概要

ブラウザのウェブページを最適化するためのいくつかのルールページの最適化静的リソース圧縮ビルド ツール...

DHTML オブジェクト (さまざまな HTML オブジェクトの共通プロパティ)

!DOCTYPE HTML ドキュメントが準拠するドキュメント型定義 (DTD) を指定します。 ...