Diseño de tabla mysql [resumen]

1. La relación del diseño de la mesa:

1. Uno a uno: Se accede con frecuencia a parte de los datos y no se accede mucho a algunos de los datos, por lo que puede crear dos tablas.

  • ¿Qué es uno a uno? Hay dos tablas AB, donde un dato de la tabla A corresponde a un dato de la tabla B, y un dato de la tabla B también corresponde a un dato de la tabla A.
  • Escenarios de aplicación: tabla de usuario y tabla de extensión de información de usuario; tabla de producto y tabla de extensión de información de producto;

Clave externa: el campo utilizado para establecer una relación en una tabla se denomina clave externa. Una tabla puede tener varias claves externas, pero solo una clave principal.

  • Si se establece una relación: agregue una clave externa de la tabla a la clave principal de la tabla principal.

Ejemplo: Crear usuario y tablas de información de usuario: si el usuario contiene campos de nombre de usuario, contraseña, apodo, edad, dirección y género. Podemos almacenar los nombres de usuario y contraseñas de uso común en la tabla de usuarios sin agregar la identificación de la clave principal y, al mismo tiempo, crear la información de usuario de la tabla secundaria, almacenar otros apodos, la edad y otra información, y agregar el ID de usuario de la clave externa correspondiente a la identificación de la clave principal de la tabla principal, para garantizar Para lograr una relación uno a uno, cuando necesitamos consultar la información de usuario de un usuario, podemos usar el id correspondiente para que coincida con la consulta de la clave externa de la tabla userid.

2. De uno a muchos: hay dos tablas AB , un dato en la tabla A corresponde a varios datos en la tabla B y un dato en la tabla B corresponde a un dato en la tabla A.

  • Escenarios de aplicación: tabla de usuarios y tabla de departamentos; tabla de productos y tabla de clasificación (una categoría contiene muchos productos, pero un producto solo puede pertenecer a una categoría).
  • Establezca una relación: agregue claves externas en múltiples segmentos, apuntando a la clave principal de otra tabla.

Ejemplo: crear una tabla emp y una tabla de departamentos: por ejemplo, creamos la tabla de departamentos de departamentos y agregamos la identificación de la clave principal. Hay dos departamentos, un departamento técnico id = 1 y un departamento de diseño corresponde a id = 2. En este momento, creamos otra tabla emp. Y agregue la clave externa deptid = 1 correspondiente al ID de la clave principal del departamento de la tabla principal. Por ejemplo, agregamos Xiao Zhang deptid = 1, Xiao Li deptid = 1, Xiao Wang deptid = 2, Xiao Zhao deptid = 2 Esto es lo que pasamos en la tabla de departamentos La identificación de la clave principal es 1 para encontrar el 1 correspondiente del deptid correspondiente en la tabla emp, puede encontrar dos personas, Xiao Zhang y Xiao Li, que se dan cuenta de uno a muchos, un departamento de la mesa principal corresponde a la mesa esclava emp Varias piezas de datos.

3. Muchos a muchos: Hay dos tablas AB, un dato en la tabla A corresponde a varios datos en la tabla B y un dato en la tabla B corresponde a varios datos en la tabla A.

  • Escenarios de aplicación: tabla de profesores y tabla de estudiantes; tabla de usuarios y tabla de roles; tabla de roles y tabla de permisos;
  • Establecer una relación: guarde la relación entre las dos tablas principales a través de la tercera tabla de relaciones; la tercera tabla de relaciones registra las claves primarias de las dos tablas principales;

Ejemplo: crear tabla de profesor, tabla de estudiante y tabla de relación:

create table teacher(id int primary key auto_increment,name varchar(10));
create table student(id int primary key auto_increment,name varchar(10));
create table t_s(tid int,sid int);

Consulta el nombre de cada alumno y el nombre del profesor correspondiente:

select s.name,t.name from t_s ts join teacher t on ts.tid = t.id join student s on ts.sid = s.id;

Quiénes son los alumnos del Maestro Li:

select s.name,t.name from t_s ts join teacher t on ts.tid = t.id join student s on ts.sid = s.id where t.name = '李老师';

Comprueba quién es el maestro de Xiaoli:

select s.name,t.name from t_s ts join teacher t on ts.tid = t.id join student s on ts.sid = s.id where s.name = '小丽';

4. Autoasociación: agregue una clave externa a la tabla actual, y el valor de la clave externa apunta a la clave primaria de la tabla actual.Este método de asociación se llama autoasociación;

  • Escenario de aplicación: en la tabla de usuarios, algunos usuarios tienen un líder superior y otros no. En este momento, puede agregar una clave externa al ID de clave principal del líder superior.

Ejemplo: crear una tabla de personas, identificación de clave principal, nombre, líder de administrador apunta a la identificación de clave principal

create table person(id int primary key auto_increment,name varchar(10),mgr int);

Guarde los siguientes datos: el efecto es el siguiente:

insert into person values(null,'如来',null),(null,'唐僧',1),(null,'悟空',2),(null,'猴孙',3);

Inserte la descripción de la imagen aquí
Consulta el nombre de cada persona y el nombre del superior:

select p.name,p2.name as 上级	 from person p left join person p2 on p.mgr = p2.id; 

Inserte la descripción de la imagen aquí
5. Caso de diseño de tablas: gestión de la autoridad

  • Método de implementación: es necesario preparar tres tablas principales y dos tablas relacionales para realizar la función de gestión de la autoridad;
  • Escenarios de aplicación:
    • Tabla principal: una tabla de usuarios, una tabla de roles, una tabla de permisos de roles
    • Tabla de relaciones: la correspondencia entre usuarios y roles, y la correspondencia entre roles y permisos de roles

Ejercicio: crea una tabla:

create table user(id int primary key auto_increment,name varchar(10));
create table role(id int primary key auto_increment,name varchar(10));
create table module(id int primary key auto_increment,name varchar(10));
create table u_r(uid int,rid int);
create table r_m(rid int,mid int);

Insertar datos:

insert into user values(1,'刘德华'),(2,'凤姐');
insert into role values(1,'男游客'),(2,'男会员'),(3,'女游客'),(4,'女管理员'); 
insert into module values(1,'男浏览'),(2,'男发帖'),(3,'女浏览'),(4,'女发帖'),(5,'女删帖');

Guarde la relación entre usuarios y roles Andy Lau: miembros masculinos y turistas femeninas Hermana Feng: administradoras y turistas masculinos:

insert into u_r values(1,2),(1,3),(2,1),(2,4);

Guardar roles y permisos:

insert into r_m values(1,1),(2,1),(2,2),(3,3),(4,3),(4,4),(4,5);

Consulta cuáles son los permisos de cada usuario:

select u.name 名字,m.name 权限 from user u join u_r on u.id = ur.id join r_m rm on ur.rid = rm.rid join module m on rm.mid = m.id;

Consulta los permisos de la hermana Feng:

select u.name 名字,m.name 权限 from user u join u_r ur on u.id=ur.uid join r_m rm on rm.rid=ur.rid join module m on rm.mid=m.id where u.name='凤姐';

Consulta quién tiene permiso de vista previa masculina:

select m.name 权限,u.name 预览 from user u join u_r ur on u.id=ur.uid join r_m rm on ur.rid=rm.rid join module m on m.id=rm.mid where m.name in('男浏览','女浏览');

Supongo que te gusta

Origin blog.csdn.net/weixin_44296929/article/details/108659615
Recomendado
Clasificación