MySQL 005 Relaciones (Final de Curso)

in #spanish6 years ago (edited)
En los primero post referentes al uso de instrucciones Transact SQL en MySQL, relaciones entre tablas por medio de 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.

MiniaturatransactSQLrelaciones.jpg

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.

uno a uno.jpg

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.

uno a muchos.jpg

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;


Para generar las relaciones primero se deben crear las tablas, posteriormente los índices, tablas primarias y por último las relaciones. El motivo de realizar todo esto por 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

PostContenidoIr
Instalacion Servidor LAMP en Xubuntu 18.04Vídeo explicativo de la instalación de servidor LAMP de laboratorio basePost 01
Transact SQL, Unión de tablas (Join)Práctica del uso de las formas de Join para consultas de tablas enlazadasPost 03
Transact SQL, Unión de tablas (Join)Práctica del uso de las formas de Join para consultas de tablas enlazadasPost 03
Transact SQL 003 Store ProcedureCreación e invocación de Store ProcedurePost 04
Transact SQL 004, Triggers (Disparadores)Creación de Disparadores y su forma de usoPost 05

Referencia

Imágenes

La imagen de la miniatura fue compuesta con Gimp 2.10 utilizando la siguiente Fuente, de PixBay

Sort:  



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!

Este post fue votado por la comunidad y trail @developspanish, comunidad encargada de curar a los programadores, traductores de software y bloggers de informática y tecnología de habla hispana.

¿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

Contenido de calidad
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

Coin Marketplace

STEEM 0.17
TRX 0.15
JST 0.028
BTC 62952.72
ETH 2429.38
USDT 1.00
SBD 2.56