Conception multi-table de MySQL et requête associative (paradigme de conception de base de données, utilisation de clés étrangères, croisement entre l'intérieur et l'extérieur de la requête associée)

Requête associative de conception multi-table

Pourquoi avez-vous besoin d'un design multi-tables?

Le but de la conception multi-tables est d'éliminer les données redondantes, de diviser une table en plusieurs tables ou d'extraire des données communes de plusieurs tables en une seule table.

Par exemple, il y a les deux tableaux suivants

Numérotage Nom Nation Pays de citoyenneté
1 Zhang San Nationalité Han Chine
2 Li Si Nationalité Han Chine
Numérotage Province Pays de citoyenneté
1 Shaanxi Chine
2 Guangzhou Chine

Il y a beaucoup de redondance dans ces deux tableaux, comme l'appartenance ethnique et la nationalité. Si nous les concevons avec plusieurs tableaux, cela peut devenir

Table nationale

Numéro ethnique Nation
1 Nationalité Han
2 Hui

Table de pays

Code postal Pays de citoyenneté
1 Chine
2 Pakistan

Et les deux premières tables peuvent devenir

Numérotage Nom Numéro ethnique Code postal
1 Zhang San 1 1
2 Li Si 1 1
Numérotage Province Code postal
1 Xi'an 1
1 Guangzhou 1

De cette façon, nous pouvons éliminer les données redondantes en double et réutiliser une donnée.

Paradigme de conception de base de données

1. Afin d'établir une base de données avec moins de redondance et une structure raisonnable, certaines règles doivent être suivies lors de la conception de la base de données. Dans les bases de données relationnelles, cette règle est également appelée paradigme temporel. Paradigm est un résumé qui répond à une certaine exigence de conception.

2. Il existe 6 paradigmes dans les bases de données relationnelles actuelles:

(1) Première forme normale (1NF);

(2) Deuxième forme normale (2NF);

(3) troisième forme normale (3NF);

(4) Paradigme de cordon de bain (BCNF);

(5) Quatrième forme normale (4NF);

(6) Cinquième forme normale (5NF), également appelée forme normale parfaite.

3. Le paradigme qui satisfait aux exigences minimales est le premier paradigme (1NF). Sur la base du premier paradigme, le deuxième paradigme (2NF) est le deuxième paradigme (2NF), et le reste du paradigme est à son tour. Seule la troisième forme normale (3NF) est nécessaire.

Première forme normale (1NF)

La première forme normale est la forme normale la plus élémentaire. Il est nécessaire de s'assurer que chaque colonne de la table de base de données reste atomique. Si toutes les valeurs de champ de la table de base de données sont des valeurs atomiques indécomposables, cela signifie que la table de base de données répond à la première forme normale.

par exemple

Numérotage Nom détails du contact
1 Wang Mazi Email / Téléphone / qq

Structure du tableau après avoir satisfait à la première forme normale

Numérotage Nom boites aux lettres téléphone QQ
1 Wang Mazi [email protected] 1313131 2212321

Deuxième forme normale (2NF)

1. Le deuxième paradigme est d'avoir une clé primaire, obligeant d'autres champs à dépendre de la clé primaire;

2. Sans clé primaire, il n'y a pas d'unicité et sans unicité, cette ligne d'enregistrements ne peut pas être localisée dans la collection, donc la clé primaire est requise.

3. Pourquoi les autres champs dépendent-ils de la clé primaire? Comme ils ne dépendent pas de la clé primaire, ils sont introuvables. Plus important encore, la ligne d'enregistrements composée d'autres champs et la clé primaire expriment la même chose, et la clé primaire est unique, ils Il suffit de s'appuyer sur la clé primaire, elle devient unique.

Troisième forme normale (3NF)

Le troisième paradigme est d'éliminer la dépendance transitive et de faciliter la compréhension, ce qui peut être considéré comme «l'élimination de la redondance».

Numéro de commande Quantité Numéro de produit nom du produit Prix ​​unitaire montant de la commande
1000 2 2020 Téléphone portable 2000 4000
Numéro de produit nom du produit Prix ​​unitaire
2020 Téléphone portable 2000
Numéro de commande Quantité montant de la commande Numéro de produit
1000 2 4000 2020

D'une manière générale, la base de données n'a besoin que de la troisième forme normale (3NF).

Instance de base de données

Tableau des élèves: nom, sexe, numéro de téléphone portable, numéro de classe, heure d'inscription
Tableau des notes: numéro de classe, nom de classe, introduction de la note
Horaire des cours: numéro du cours, nom du cours, introduction du cours
Plusieurs relations entre les tableaux et les tableaux:
1. Association un-à-un;
2. Association un-à-plusieurs;
3. Association plusieurs-à-un;
4. Association plusieurs-à-plusieurs.

-- 创建年级表
CREATE TABLE t_grade(
	g_id INT PRIMARY KEY AUTO_INCREMENT COMMENT'年级编号',
	g_name VARCHAR(10) COMMENT'年级名称',
	g_desc VARCHAR(50) COMMENT'年级介绍'
)

Insérez la description de l'image ici

-- 创建学生表
CREATE TABLE t_stu(
	s_id INT PRIMARY KEY AUTO_INCREMENT COMMENT'学号',
	s_name VARCHAR(10) COMMENT'姓名',
	s_sex CHAR(1) DEFAULT'男' COMMENT'性别',
	s_phone INT(11) COMMENT'电话',
	s_g_id INT COMMENT'年级编号',
	reg_time DATETIME COMMENT'注册时间'
)

Insérez la description de l'image ici

Introduisez la relation d'association faible: la structure de la table est essentiellement indépendante. La relation entre la table et la table est définie artificiellement. La suppression des données dans la table d'association n'a aucun effet sur l'autre. Le numéro de note et la table de note dans la figure ci-dessus sont une sorte d'association faible. relation.

Clé étrangère

Parlons de la relation d'association forte, ajoutons des contraintes à la clé étrangère et forçons la clé étrangère à avoir une relation d'association avec la clé primaire correspondante (clés étrangères, correspondant à la clé primaire dans une autre table)

1. Clé étrangère: fait référence à un enregistrement d'une autre table de données.

2. Le type de données de la colonne de clé étrangère doit être cohérent avec la colonne de clé primaire.

3.La relation d'association / référence entre les tables de données est établie par la clé primaire et la clé étrangère spécifiques.

La syntaxe pour ajouter des clés étrangères lors de la création d'une table:

create table 表名(
	constraint 约束名 foreign key(外键列) references 主键表(主键列)
)

Ajoutez la syntaxe de contrainte de clé étrangère:

alter table 表名 
add [constraint 约束名(自己起的)] 
foreign key(外键列) 
references 关联表(主键)

Supprimer la syntaxe de la clé étrangère:

alter table 表名 drop foreign key 外键约束名;

Instance de base de données

Ajouter une clé étrangère au tableau ci-dessus

ALTER TABLE t_stu 
ADD CONSTRAINT s_foreign_key 
FOREIGN KEY(s_g_id) 
REFERENCES t_grade(g_id); 
-- 创建课程表,多对多关系,一个学生对应多个课程,一个课程对应多个学生
CREATE TABLE t_course(
	c_id INT PRIMARY KEY AUTO_INCREMENT COMMENT'课程号',
	c_name VARCHAR(10) COMMENT'课程名',
	c_desc VARCHAR(20) COMMENT'课程介绍'
)
-- 设计关系表来存储多个数据之间的关系
CREATE TABLE t_stu_course(
	sc_id INT PRIMARY KEY AUTO_INCREMENT,
	sc_stu_id INT,
	sc_course_id INT,
	CONSTRAINT stu_id_fk FOREIGN KEY(sc_stu_id) REFERENCES t_stu(s_id),
	CONSTRAINT cou_id_fk FOREIGN KEY(sc_course_id) REFERENCES t_course(c_id)
)

Insérez la description de l'image ici
Insérez la description de l'image ici

Remarque

1. Lorsqu'il n'y a pas d'enregistrement correspondant dans la table maître, l'enregistrement ne peut pas être ajouté à la table esclave

2. Impossible de modifier la valeur de la table principale et d'isoler les enregistrements de la table esclave

3. Il existe un enregistrement correspondant à la table principale de la table et la ligne ne peut pas être supprimée de la table principale

4. Avant de supprimer la table principale, supprimez la table secondaire

Requête associée

Aperçu

1. La requête associée est également appelée requête multi-table. Lorsque le champ de requête provient de plusieurs tables, la requête de jointure est utilisée.

2. Phénomène de produit cartésien: le tableau 1 a m lignes, le tableau 2 a n lignes et le résultat de la requête a m * n lignes

(1) Raison: il n'y a pas de condition de connexion valide

(2) Comment éviter: ajouter des conditions de connexion valides

classification

Jointure interne

Interrogez les données d'intersection dans les deux tables qui remplissent les conditions

grammaire:

select 结果 from1,2 where1.1=2.2
SELECT s_id,s_name,s_sex,s_g_id,g_name,g_id 
FROM t_stu,t_grade
WHERE s_g_id = g_id

Insérez la description de l'image ici

1. Connexion équivalente

#等值连接
/*
语法
select 结果 from 表名 inner join 被连接的表名(外键表) on 外键=主键
*/
SELECT * 
FROM t_stu
INNER JOIN t_grade ON s_g_id = g_id 

Insérez la description de l'image ici

2. Connexion non équivalente

#创建一个等级表
CREATE TABLE t_level(
	l_name CHAR(1),
	l_min_score INT,
	l_max_score INT
)
/*
非等值连接
语法
select 结果
from 表1
inner join 表2
on 表1.列1 between 表2.列2 and 表2.列3
*/
SELECT
  s_name,
  l_name
FROM
  t_stu
  INNER JOIN t_level
    ON s_score BETWEEN l_min_score
    AND l_max_score

Insérez la description de l'image ici

Insérez la description de l'image ici

3. Auto-connexion: établir une relation de connexion dans une table

CREATE TABLE t_area(
	a_id INT,
	a_name VARCHAR(10),
	a_father INT
)
#在一张表中建立连接关系
SELECT
  t1.a_name,
  t2.a_name
FROM
  t_area t1
  INNER JOIN t_area t2
    ON t1.a_father = t2.a_id;

Insérez la description de l'image ici
Insérez la description de l'image ici

Jointure externe

1. Jointure externe gauche (jointure gauche)

/*
语法
select 结果
from 表1
left join 表2 
on 表1.字段=表2.字段l;

不管表1的字段与表2的字段是否有连接,都会显示表1的所有信息
*/
SELECT *
FROM t_stu s
LEFT JOIN t_grade g
ON s.s_g_id = g.g_id;

2. Jointure externe droite (jointure droite)

/*
语法
select 结果
from 表1
right join 表2 
on 表1.字段1=表2.字段2;

不管表1有没有和表2中的所有数据关联,都会显示出表2的所有
*/
SELECT *
FROM t_stu s
RIGHT JOIN t_grade g
ON s.s_g_id = g.g_id;
Connexion croisée
-- 交叉连接 类似于内连接
SELECT *
FROM t_stu s
CROSS JOIN t_grade g
ON s.s_g_id = g.g_id;

Je suppose que tu aimes

Origine blog.csdn.net/Lotus_dong/article/details/112913839
conseillé
Classement