Diseño de múltiples tablas de MySQL y consulta asociativa (paradigma de diseño de base de datos, uso de claves externas, cruce entre el interior y el exterior de la consulta asociada)

Consulta asociativa de diseño de varias tablas

¿Por qué necesita un diseño de varias mesas?

El propósito del diseño de múltiples tablas es eliminar datos redundantes, dividir una tabla en múltiples tablas o extraer datos comunes de múltiples tablas en una sola tabla.

Por ejemplo, existen las siguientes dos tablas

Numeración Nombre Nación Pais de Ciudadania
1 Zhang San Nacionalidad Han China
2 Li Si Nacionalidad Han China
Numeración provincia Pais de Ciudadania
1 Shaanxi China
2 Guangzhou China

Hay mucha redundancia en estas dos tablas, como la etnia y la nacionalidad. Si las diseñamos con varias tablas, puede convertirse en

Mesa nacional

Número de etnia Nación
1 Nacionalidad Han
2 Hui

Tabla de países

Código de país Pais de Ciudadania
1 China
2 Pakistán

Y las dos primeras tablas pueden convertirse

Numeración Nombre Número de etnia Código de país
1 Zhang San 1 1
2 Li Si 1 1
Numeración provincia Código de país
1 Xi'an 1
1 Guangzhou 1

De esta manera, podemos eliminar datos redundantes duplicados y podemos reutilizar un solo dato.

Paradigma de diseño de bases de datos

1. Para construir una base de datos con menos redundancia y una estructura razonable, se deben seguir ciertas reglas al diseñar la base de datos. Esta regla también se denomina paradigma temporal en bases de datos relacionales. El paradigma es un resumen que cumple con un determinado requisito de diseño.

2. Existen 6 paradigmas en las bases de datos relacionales actuales:

(1) Primera forma normal (1NF);

(2) Segunda forma normal (2NF);

(3) Tercera Forma Normal (3NF);

(4) Paradigma de cordón de baño (BCNF);

(5) Cuarta Forma Normal (4NF);

(6) Quinta forma normal (5NF), también conocida como forma normal perfecta.

3. El paradigma que cumple con los requisitos mínimos es el primer paradigma (1NF). Sobre la base del primer paradigma, la satisfacción adicional de requisitos más normativos se denomina segundo paradigma (2NF), y el resto del paradigma es a su vez. En general, la base de datos Solo se necesita la tercera forma normal (3NF).

Primera forma normal (1NF)

La primera forma normal es la forma normal más básica. Es necesario asegurarse de que cada columna en la tabla de la base de datos permanezca atómica. Si todos los valores de campo en la tabla de la base de datos son valores atómicos indecomponibles, significa que la tabla de la base de datos cumple con la primera forma normal.

por ejemplo

Numeración Nombre Detalles de contacto
1 Wang Mazi Correo electrónico / teléfono / qq

Estructura de la tabla después de satisfacer la primera forma normal

Numeración Nombre buzón teléfono QQ
1 Wang Mazi [email protected] 1313131 2212321

Segunda forma normal (2NF)

1. El segundo paradigma es tener una clave primaria, requiriendo que otros campos dependan de la clave primaria;

2. Sin una clave principal, no hay unicidad y, sin unicidad, esta fila de registros no se puede ubicar en la colección, por lo que se requiere la clave principal.

3. ¿Por qué otros campos dependen de la clave principal? Como no dependen de la clave principal, no se pueden encontrar. Más importante aún, la fila de registros compuesta por otros campos y la clave principal expresan lo mismo, y la clave principal es única, Solo necesita confiar en la clave principal, se vuelve única.

Tercera forma normal (3NF)

El tercer paradigma consiste en eliminar la dependencia transitiva y facilitar la comprensión. Se puede considerar que "elimina la redundancia".

Número de orden Cantidad Número de producto nombre del producto precio unitario Total de la orden
1000 2 2020 Teléfono móvil 2000 4000
Número de producto nombre del producto precio unitario
2020 Teléfono móvil 2000
Número de orden Cantidad Total de la orden Número de producto
1000 2 4000 2020

En términos generales, la base de datos solo necesita la tercera forma normal (3NF).

Instancia de base de datos

Tabla de alumnos: nombre, sexo, número de teléfono móvil, el número de grado, el tiempo de registro
mesa de Grado: Número de grado, nombre, grado introducción
Horario del curso: número del curso, nombre del curso, introducción del curso
Varias relaciones entre tablas y tablas:
1.One Asociación de uno a uno;
2. Asociación de uno a muchos;
3. Asociación de muchos a uno;
4. Asociación de muchos a muchos.

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

Inserte la descripción de la imagen aquí

-- 创建学生表
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'注册时间'
)

Inserte la descripción de la imagen aquí

Introduzca la relación de asociación débil: la estructura de la tabla no está relacionada en esencia. La relación entre la tabla y la tabla está definida artificialmente. Eliminar los datos en la tabla de asociación no tiene ningún efecto en la otra. El número de calificación y la tabla de calificaciones en la figura anterior son una especie de asociación débil. relación.

Clave externa

Hablemos de la relación de asociación fuerte, agregue restricciones a la clave externa y obliguemos a la clave externa a tener una relación de asociación con la clave principal correspondiente (claves externas, correspondientes a la clave principal en otra tabla)

1. Clave externa: se refiere a un registro de otra tabla de datos.

2. El tipo de datos de la columna de clave externa debe ser coherente con la columna de clave principal.

3. La relación de asociación / referencia entre las tablas de datos se establece mediante la clave primaria específica y la clave externa.

La sintaxis para agregar claves externas al crear una tabla:

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

Agregue la sintaxis de restricción de clave externa:

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

Eliminar la sintaxis de la clave externa:

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

Instancia de base de datos

Agregue una clave externa a la tabla anterior

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)
)

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

Nota

1. Cuando no hay un registro correspondiente en la tabla maestra, el registro no se puede agregar a la tabla esclava

2. No se puede cambiar el valor en la tabla principal y hacer que los registros de la tabla esclava se aíslen

3. Hay un registro correspondiente a la tabla principal de la tabla, y la fila no se puede eliminar de la tabla principal

4. Antes de eliminar la tabla principal, elimine la tabla secundaria

Consulta relacionada

Visión general

1. La consulta asociada también se denomina consulta de varias tablas. Cuando el campo de consulta proviene de varias tablas, se utilizará la consulta de combinación.

2. Fenómeno del producto cartesiano: la tabla 1 tiene m filas, la tabla 2 tiene n filas y el resultado de la consulta tiene m * n filas

(1) Razón: no hay una condición de conexión válida

(2) Cómo evitarlo: agregue condiciones de conexión válidas

clasificación

Unir internamente

Consultar los datos de intersección en las dos tablas que cumplen las condiciones

gramática:

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

Inserte la descripción de la imagen aquí

1. Conexión equivalente

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

Inserte la descripción de la imagen aquí

2. Conexión no equivalente

#创建一个等级表
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

Inserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí

3. Auto conexión: establezca una relación de conexión en una mesa

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;

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

Unión externa

1. Unión exterior izquierda (unión izquierda)

/*
语法
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. Unión externa derecha (unión derecha)

/*
语法
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;
Conexión cruzada
-- 交叉连接 类似于内连接
SELECT *
FROM t_stu s
CROSS JOIN t_grade g
ON s.s_g_id = g.g_id;

Supongo que te gusta

Origin blog.csdn.net/Lotus_dong/article/details/112913839
Recomendado
Clasificación