Directorio de artículos
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 | |
---|---|---|---|---|
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'年级介绍'
)
-- 创建学生表
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'注册时间'
)
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)
)
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 结果 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. Conexión equivalente
#等值连接
/*
语法
select 结果 from 表名 inner join 被连接的表名(外键表) on 外键=主键
*/
SELECT *
FROM t_stu
INNER JOIN t_grade ON s_g_id = g_id
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
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;
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;