MySQL: データの整合性

MySQL: データの整合性

データ整合性は、エンティティ整合性、ドメイン整合性、参照整合性に分けられます。

参照整合性:

参照整合性とは、主に外部キー制約を使用した複数のテーブル間の設計を指します。
複数テーブル設計: 1対多、多対多、1対1の設計

1. エンティティ(行)の整合性

エンティティの整合性は、テーブルの主キーを通じて実現されます。
主キーを使用して、レコードが一意であり、空ではないことを示します。構文: 主キー
主キーの分類:

論理主キー: ID など、実際のビジネス上の重要性を表すものではなく、レコードを一意に識別するためにのみ使用されます (推奨)
ビジネス主キー: 実際のビジネス ロジックに関係するユーザー名など。
特徴: ユニーク、null ではない
自動増加: auto_increment

例えば:

テーブル person2 を作成する(
			id int 主キー auto_increment,
			名前varchar(100)
);

2. ドメイン(列)の整合性

非 null 制約: 非 null
一意制約: 一意

テーブル person3 を作成(
			id int null ではない ユニーク、
			名前 varchar(20) null ではない 一意、
			性別varchar(20) nullではない、
			電話 char(11) ユニーク #許可されていません、
	);

3: 参照整合性

1. 1対多
a: たとえば、顧客と注文の関係は 1 対多です。顧客は複数の注文を持つことができ、1 つの注文は 1 人の顧客に属します。
b: 外部キーは、より多くのパーティに設定されます

1対多を作成するための構文入力:
顧客テーブルを作成します。

テーブルcustomersを作成する(
	id int、
	名前varchar(20),
	アドレスvarchar(100)、
	主キー(ID)
);

Orders テーブルを作成します。

テーブル注文を作成する(
	id int、
	order_num int 主キー、
	価格 float(4,2)、
	顧客ID int,
	 制約 customer_ord_fk 外部キー(customer_id) は customers(id) を参照します。
);

注: 制約: 制約、外部キー: 外部キー、参照: 参照 customer_ord_fk という名前の外部キー制約を作成します。外部キーは customer_id を参照し、customers テーブルの id 列を参照します。

テーブル操作は1対多を作成します

顧客テーブル



注文表

外部キー設定を注文する


外部キー フィールド customer_id を持つ customer_ord_fk という名前の外部キー制約を作成します。この外部キー フィールドは、customers テーブルの id 列を参照します。

拡張: サブテーブルの削除と更新の 4 つの戦略:

  1. 1. カスケード戦略: この戦略を使用すると、メイン テーブルのレコードが削除されるか、主キー フィールドが変更されると、サブ テーブルも同期的に削除または変更されます。
  2. 2、アクションなし戦略: この戦略を使用する場合、メイン テーブルを削除する前にサブ テーブルを削除する必要があります。メイン テーブルのレコードを削除する前に、サブ テーブルに関連付けられているレコードを削除する必要があります。メイン テーブルの主キー フィールドの値を更新することはできません。
  3. 3、メインテーブルの制約戦略を制限します。この戦略は、メインテーブルに対してNO ACTIONと同じ制約を持ちます。
  4. 4、ポリシーをクリアするには「no」を設定します。この戦略を使用する場合、主テーブルが削除されるか主キーが変更されると、子テーブルの外部キーは null に設定されます。子テーブルの外部キーが主キーであるか、または null 以外に設定されている場合、メイン テーブルの削除と主キーの変更は何もアクションをとらないのと同じになることに注意してください。

2. 多対多

教師テーブルを作成します。

テーブル教師を作成する(
		id int 主キー auto_increment,
		名前varchar(20)、
		性別文字(5)
		件名varchar(20)
		);

学生テーブルを作成します。

学生テーブルを作成する(
	id int 主キー、 
	名前varchar(20),
	年齢 int	
);

3 番目は関連テーブルです。

テーブルteacher_student(を作成する
   id int、
	t_id 整数、
	s_id 整数、
	主キー(t_id,s_id)
  制約teacher_id_fk外部キー(t_id)はstudents(id)を参照します。
  制約student_id_fk外部キー(s_id)はteachers(id)を参照します。
);

テーブル操作多対多

教師テーブルを作成します。

学生テーブルを作成します。

3番目の表:


3. 一対一

(1)通常は、1つのテーブルのみを設計する必要があります。 (2)2つのテーブルを設計することもできます。

方法 1: 最初のテーブルの主キーに対応する外部キー (一意に設定) として 2 番目のテーブルにフィールドを作成します。
方法 2: 最初のテーブルの主キーに対応する、2 番目のテーブルの主キーを外部キーとして直接使用します。

2つのテーブル: ユニークであることは非常に重要です

テーブルユーザーを作成(
id int 主キー auto_increment,
名前varchar(20),
年齢 int
);
テーブルカードを作成(
id int 主キー auto_increment,
num varchar(20) が null ではない、
アドレスvarchar(100)がnullではありません。
user_id int ユニーク、
制約 user_card_fk 外部キー(user_id) は user(id) を参照します
);

上記は、編集者が紹介したMySQLデータ整合性の詳細な説明と統合です。皆様のお役に立てれば幸いです。ご質問がある場合は、メッセージを残してください。編集者がすぐに返信します。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。

以下もご興味があるかもしれません:
  • データベースの削除から逃走までの MySQL の徹底分析_上級編 (I) - データ整合性
  • MySQL と PHP の基礎と応用 - データの整合性

<<:  webpackを使用してTypeScriptコードをパッケージ化およびコンパイルする方法を教えます

>>:  CentOS 8で自動更新を設定するための手順を完了する

推薦する

WeChatアプレットのスワイパードットのドットをスライダーに変更する方法

目次背景ターゲット効果アイデア成し遂げるスワイパーは変更を聞きますカスタムドットモジュール変更イベン...

aタグのhref属性とonclickイベントの比較

まず、href 属性と onclick イベントの実行順序について説明します。マウスが a タグをク...

Echatsチャートの大画面適応を実装する方法

目次説明する成し遂げるプロジェクトのディレクトリ構造は次のとおりです。効果図は以下のとおりです要約す...

JS関数のカリー化の詳細な説明

目次1. 補足知識ポイント: 関数の暗黙的な変換2. 補足知識: call/apply を使って配列...

Ubuntu システムにおけるネットワーク構成ファイルの分析と説明

今日は奇妙なネットワーク問題に遭遇しました。調査プロセスといくつかの構成状況を記録し、Linux で...

HTML(CSSスタイル仕様)を読む必要があります

CSS スタイル仕様1. クラスセレクター2. タグセレクター3. IDセレクター4. CSSスタイ...

VMware に Centos7 をインストールした後に外部ネットワークに ping できない問題を解決する

クラスターを構成する際に問題が発生しました。当初は 3 台の仮想マシンすべてが外部ネットワークに p...

Zabbix パスワードをリセットする方法 (ワンステップ)

問題の説明長い間アカウントパスワードを入力して Zabbix にログインしていないため、管理者パスワ...

MySQLユーザー権限テーブルについての簡単な説明

MySQL はインストール時に自動的に mysql という名前のデータベースを作成します。mysql...

CSS3 で実装された価格表

結果: 実装コードhtml <div id="価格表" class=&qu...

MySQLパーティションテーブルは月別に分類されています

目次テーブルを作成するデータベース ファイルを表示します。入れるクエリ消去補足:Mysqlは月テーブ...

Nginx リバース プロキシと負荷分散の実践

リバースプロキシリバースプロキシとは、プロキシサーバーを介してユーザーのアクセス要求を受信し、ユーザ...

DockerコンテナにPythonアプリケーションをデプロイするプロセスの分析

シンプルなアプリケーションの展開1. ディレクトリ構造: └── Pythonpro #ディレクトリ...

MySQL主キー命名戦略関連

最近、データライフサイクル管理の詳細を整理していたときに、小さな問題を発見しました。それは、MySQ...