MySQL 005 Relaciones (Final de Curso)
inner join
, simplificación de procesos mediante librerías de código, bien sea las invocadas store procedure
o bien programadas para ejecutarse al cumplirse ciertas circunstancias triggers
.
La manipulación de la data por medio de funciones e incluso se ha montado una máquina virtual de laboratorio. El tratamiento de data, bien sea mediante su extracción usando select
, modificación update
e inserción insert
; es posible solo gracias a la cualidad de MySQL de ser un base de datos relacional.
Transact es el lenguaje de manipulación de datos que permite la realización de todos estos conjuntos procesos sobre la data, para que todos estos procesos sean ejecutados primero debe realizarse el diseño de la estructura donde se contendrá la información. Las bases de datos relacionales se basan en la integridad de la información.
MySQL es un gestor de base de datos relacionales, lo cual significa que sus tablas pueden estar unidas a través de campos de la misma configuración que sirven de nexo entre las tablas, permitiendo relaciones de uno a uno, uno a muchos y muchos a muchos.
Relaciones uno a uno, cuando los campos que sirven de referencia son programados unique
, de esta forma solo puede existir un registro en la tabla A, afiliado a un canal de la tabla B.
Tabla realizada por @ubaldonet
Relaciones de uno a muchos, son aquella donde uno de los campos de referencias utilizado contiene la función unique y el otro no, de esta manera solo puede existir un campo con este valor en la tabla usada mientras que en la otra tabla este campo se repite múltiples veces.
Tabla realizada por @ubaldonet
Relaciones muchos a muchos, no se refiere a una relación natural entre dos tablas de forma directa, es una relación entre dos tablas donde un valor se repite varias veces en el campo que las relaciona, como esta relación no existe de forma natural se hace a través de lo que se conoce como una tabla pivote. Podemos usar como ejemplo un sistema de distribución de materia, una materia puede tener muchos estudiantes y un estudiantes varias materias, existiendo una tabla pivote intermedia donde las materias son un campo unique
.
Todas estas relaciones traen consigo una serie de lazos, entre los campos comunes como son los foreign key options
, que pueden ser on update
, on delete
. Esto indica el comportamiento de una tabla con respecto a la otra.
Son de importancia debido a que eliminar un campo en una tabla de uno a muchos, produciría que todos los registro unidos en la tabla relacionada se borren de forma inmediata, de igual forma con on update
al momento de realizar una modificación del campo referencia. En una relación uno a uno se afectaría el registro asociado en la otra tabla.
Todo esto permite crear estructuras donde se busca evitar que la información de las tablas mantenga una coherencia y evitar exista información duplicada sin necesidad y registros inconexos que se vuelvan en registros dañados. Produciendo lo que se conoce como normalización.
Para poder diseñar estas estructuras de tablas y sus relaciones se utilizan diagramas conocidos como modelos de entidad de relación o diagrama de entidad de relación, donde los procesos se diseñan según la información a trabajarse hasta el punto de llevarlo a sus campos y así poder determinar las tablas con sus relaciones.
Las bases de datos relacionales son de gran ayuda en el diseño de sistemas donde se quiere controlar la información y evitar la duplicidad de datos. Sin embargo estas verificaciones pueden traer consigo un mayor uso de recursos y afectar los tiempos de respuestas, hecho por el cual un diseño adecuado es necesario para evitar afectar el rendimiento del sistema.
Estructuras Usadas
Para esta práctica se han utilizado dos tablas que han sido colocadas en una Base de datos separada para poder probar:
CREATE TABLE tblrecibobase
(
identificador
int(10) UNSIGNED NOT NULL,
cedula
varchar(13) NOT NULL DEFAULT '',
apto
varchar(7) NOT NULL DEFAULT '',
alicuotaactual
decimal(12,4) NOT NULL DEFAULT '0.0000',
montomes
decimal(12,2) NOT NULL DEFAULT '0.00',
mes
int(10) UNSIGNED NOT NULL DEFAULT '0',
etapa
varchar(15) NOT NULL DEFAULT '',
torre
varchar(5) NOT NULL DEFAULT '',
ano
int(10) UNSIGNED NOT NULL DEFAULT '0',
refbase
int(10) NOT NULL DEFAULT '0',
cancelado
tinyint(1) NOT NULL DEFAULT '0',
montosindeuda
decimal(12,2) NOT NULL DEFAULT '0.00',
nota
varchar(40) NOT NULL DEFAULT '',
formapago
varchar(20) NOT NULL DEFAULT '',
nodocumento
varchar(25) NOT NULL DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE tblrecibodetalle
(
identificador
int(10) UNSIGNED NOT NULL,
cedula
varchar(13) NOT NULL DEFAULT '',
monto
decimal(13,2) NOT NULL DEFAULT '0.00',
comun
char(8) NOT NULL DEFAULT '',
tipoinmueble
varchar(13) NOT NULL DEFAULT '',
inmueble
varchar(17) NOT NULL DEFAULT '',
tipogasto
char(4) NOT NULL DEFAULT '',
descripcion
varchar(60) NOT NULL DEFAULT '',
refbase
int(10) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Estas dos tablas se han utilizado en ocasiones anteriores y a única modificación realizada en su estructura es eliminar los campos de fecha para fines prácticos del ejercicio.
Posteriormente a la creación de las tablas se generan los índices, mediante la instrucción alter table
:
ALTER TABLE tblrecibobase
ADD PRIMARY KEY (identificador
,refbase
),
ADD UNIQUE KEY index3
(refbase
) USING BTREE,
ADD KEY index2
(refbase
) USING BTREE;
ALTER TABLE tblrecibodetalle
ADD PRIMARY KEY (identificador
),
ADD KEY index2
(refbase
) USING BTREE;
ALTER TABLE tblrecibobase
MODIFY identificador
int(10) UNSIGNED NOT NULL AUTO_INCREMENT;
ALTER TABLE tblrecibodetalle
MODIFY identificador
int(10) UNSIGNED NOT NULL AUTO_INCREMENT;
ALTER TABLE tblrecibodetalle
ADD CONSTRAINT tblrecibodetalle_ibfk_1
FOREIGN KEY (refbase
) REFERENCES tblrecibobase
(refbase
) ON DELETE CASCADE ON UPDATE CASCADE;
alter table
es muy sencilla, no se pueden realizar relaciones si no existen primero tablas que relacionar, de tal manera primero deben crearse las estructuras y luego relacionarlas.
Practica
Material previo de Transact SQL
Post | Contenido | Ir |
---|---|---|
Instalacion Servidor LAMP en Xubuntu 18.04 | Vídeo explicativo de la instalación de servidor LAMP de laboratorio base | Post 01 |
Transact SQL, Unión de tablas (Join) | Práctica del uso de las formas de Join para consultas de tablas enlazadas | Post 03 |
Transact SQL, Unión de tablas (Join) | Práctica del uso de las formas de Join para consultas de tablas enlazadas | Post 03 |
Transact SQL 003 Store Procedure | Creación e invocación de Store Procedure | Post 04 |
Transact SQL 004, Triggers (Disparadores) | Creación de Disparadores y su forma de uso | Post 05 |
Referencia
- Manual de Referencia en línea MySQL 8.0 link
- La herramienta MySQL Workbench puede Descargarse de aquí
- https://es.wikipedia.org/wiki/MySQL
- https://es.wikipedia.org/wiki/Base_de_datos_relacional
- https://es.wikipedia.org/wiki/Modelo_entidad-relaci%C3%B3n
- https://dev.mysql.com/doc/refman/8.0/en/alter-table.html
- https://dev.mysql.com/doc/workbench/en/wb-relationship-editor.html
- https://dev.mysql.com/doc/workbench/en/wb-foreign-key-relationships.html
Imágenes
La imagen de la miniatura fue compuesta con Gimp 2.10 utilizando la siguiente Fuente, de PixBay
This post has been voted on by the steemstem curation team and voting trail.
There is more to SteemSTEM than just writing posts, check here for some more tips on being a community member. You can also join our discord here to get to know the rest of the community!
¿Quieres recibir mejores recompensas en tus post de informática, tecnología o programación, ayúdanos delegando algo de SP:
1 SP, 5 SP, 10 SP
Votado por el trail Team-México @team-mexico
Canal Discord ¡Te esperamos!
Hi @ubaldonet!
Your post was upvoted by utopian.io in cooperation with steemstem - supporting knowledge, innovation and technological advancement on the Steem Blockchain.
Contribute to Open Source with utopian.io
Learn how to contribute on our website and join the new open source economy.
Want to chat? Join the Utopian Community on Discord https://discord.gg/h52nFrV