SQL における参照整合性の詳細な説明 (1 対 1、1 対多、多対多)

SQL における参照整合性の詳細な説明 (1 対 1、1 対多、多対多)

1. 参照整合性

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

1. 1対多

関連するキーセンテンス:
制約 cus_ord_fk 外部キー (customer_id) 参照 customer(id)
顧客テーブル - 注文テーブルを作成します。顧客は複数の注文を行うことができ、各注文には 1 人の顧客のみを含めることができます。

-- 関連付け (1 から N)

顧客テーブルを作成(

	id int 主キー auto_increment,
	名前varchar (20) nullではない、
	アドレスvarchar (20) nullではない

);

テーブル注文を作成する(

	order_num varchar(20) 主キー、

	価格 FLOAT NULL ではない、

	customer_id int, -- 外部キー制約 cus_ord_fk 外部キー (customer_id) 参照 customer(id)

);

顧客(名前、住所)に値("zs","北京")を挿入します。

顧客(名前、住所)に値("ls","上海")を挿入します。

顧客から*を選択します。

INSERT INTO orders values("010",30.5,1);

INSERT INTO orders values("011",60.5,2);

INSERT INTO orders values("012",120.5,1);

注文から*を選択します。

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

拡張機能:

単語テーブルの削除と更新戦略:

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

2. 多対多

生徒と教師の関係表を作成し、生徒に複数の教師を割り当て、教師に複数の生徒を割り当てることができる

-- 多対多の関係 -- 教師テーブルを作成する CREATE TABLE teacher (
	id INT、
	名前 VARCHAR (20) NULLではない、
	性別 CHAR (2) NOT NULL,
	主キー (id)
);

-- 学生テーブルを作成する CREATE TABLE student (
	id INT、
	名前 VARCHAR (20) NULLではない、
	年齢 INT NOT NULL
);

ALTER TABLE student に PRIMARY KEY (id) を追加します。

-- 3番目のリレーションテーブル CREATE TABLE tch_std (
	教師ID INT、
	学生ID INT、
	制約 fk_teacher 外部キー (teacher_id) 参照 teacher (id)、
	制約 fk_student 外部キー (student_id) 参照 teacher (id)
);

消去
から
	教師
どこ
	id = 3;

選択
	*
から
	教師;

選択する
	*
から
	tch_std;

注意: 多対多は3つのテーブルで、3番目のテーブルは最初の2つのテーブルのIDに対応する外部キー制約を作成します。

3. 一対一

2 つの形式:

1) 外部キーの関連付けに従って、IdCardテーブルの外部キーに一意制約を追加します。
2) 主キーの関連付けに従って主キーに外部キー制約を追加する

-- 1対1 -- ユーザーテーブルを作成する CREATE TABLE users (
	id INT、
	名前 VARCHAR (20) NULLではない、
	性別 CHAR (2) NOT NULL,
	主キー (id)
);

-- カードテーブルを作成する CREATE TABLE card (
	id INT、
	アドレス VARCHAR (100) NOT NULL、
	ユーザーID INT 一意、
	制約 users_id_fk 外部キー(user_id) は users(id) を参照します
);

ALTER TABLE カードに PRIMARY KEY (id) を追加します。

これは方法1で、外部キーに固有の制約を追加する

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

以下もご興味があるかもしれません:
  • MySQL: データの整合性
  • MySQL データベースに基づくデータ制約の例と 5 つの整合性制約の紹介
  • データベースの削除から逃走までの MySQL の徹底分析_上級編 (I) - データ整合性
  • SQL Server データベースのアーキテクチャとオブジェクトの詳細な説明、データ整合性の定義
  • 知っておくべきSQL文(VIII)データベース整合性制約
  • MySQL 学習ノート 4: 整合性制約制限フィールド

<<:  SpringBootはActiviti7実装コードを統合する

>>:  jQueryはテーブルのシームレスなスクロールを実現します

推薦する

JS 正規マッチングの落とし穴の記録

最近、JS の正規表現マッチングの落とし穴を発見したのですが、その時はあまりにも奇妙だったので、何か...

Zabbix 5.0 ディスク自動検出と読み取り/書き込み監視の問題を分析する

ディスクを自動的に検出する構成キーの値注: このキー値は Linux プラットフォームでのみサポート...

MySQL で単一のフィールド内の複数の値を分割および結合する方法

複数の値を組み合わせて表示これで、図1から図2に示す要件が揃いました。 どうやってやるんですか?次の...

MySQL列挙型のテスト例

プロジェクトを開発しているとき、支払い済み、支払済み、クローズ済み、返金済みなどの注文ステータスなど...

Vue プロジェクトで TypeScript クラスを適用する方法

目次1. はじめに2. 使用1. @コンポーネント2. 計算、データ、方法3. @props 4. ...

SpringBoot のパッケージ化と Docker へのアップロード、およびマルチインスタンス デプロイメントの実装に関する簡単な分析 (IDEA バージョン)

最近友人からDockerを触ったことがあるかと聞かれました。あまり自信がなかったので答えられませんで...

MySQLクエリ条件のnot inとinの違いと理由

まずSQLを書く SELECT DISTINCT from_id タラから cod.from_id ...

モバイル アプリのユーザー インターフェース設計に関する 10 のヒント

ヒント1: 集中力を保つ最高のモバイル アプリは、1 つのことを非常にうまく行うことに重点を置いてい...

仮想スクロールを簡単に実装するためのVueサンプルコード

目次序文ローリング原理成し遂げるソースコード参照する序文モバイル Web ページの日常的な開発では、...

jQuery はシャッター効果を実現します (li 配置を使用)

この記事では、ブラインド効果を実現するためのjQueryの具体的なコードを参考までに紹介します。具体...

HTML テーブルタグチュートリアル (27): セルの背景画像属性 BACKGROUND

セルの背景画像を設定でき、任意の GIF または JPEG 画像ファイルを使用できます。基本的な構文...

MySQL 論理バックアップとリカバリ テストの概要

目次1. データベース論理バックアップとはどのようなバックアップですか? 2. よく使われる論理バッ...

Ubuntu 18.04 Server に静的 IP を設定する方法

1. 背景Netplan は、Ubuntu システムのネットワーク設定を簡単に管理および構成できるよ...

MySQL 8.0 WITH クエリの詳細

目次MySQL 8 の WITH クエリについて学ぶ1. 例3. 練習するMySQL 8 の WIT...

HTMLフォーム要素の詳しい解説(パート1)

HTML フォームは、さまざまな種類のユーザー入力を収集するために使用されます。 HTML フォー...