Répertoire d'articles
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 | |
---|---|---|---|---|
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'年级介绍'
)
-- 创建学生表
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'注册时间'
)
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)
)
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 结果 from 表1,表2 where 表1.列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
1. Connexion équivalente
#等值连接
/*
语法
select 结果 from 表名 inner join 被连接的表名(外键表) on 外键=主键
*/
SELECT *
FROM t_stu
INNER JOIN t_grade ON s_g_id = g_id
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
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;
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;