viernes, 29 de abril de 2016

Restricciones NOT NULL, Check, Default, AutoIncrement y Unique en MariaDB (MySQL) Parte II

Buenas tardes queridos lectores, el día de hoy les explicaré los temas que me faltaron el el post anterior que fue, el check y el default, pero para eso crearemos las tablas que faltan, además nos servirá de base de datos de prueba por el momento, en un post mas adelante les pasaré la base de datos ya llena, para comenzar a trabajar con JOINS, Procedimientos Almacenados, Disparadores, Vistas, etc. pero por el momento nos conformaremos con el esqueleto, y con llenar algunos registros, vamos a partir de que ya tenemos la tabla PAISES que hicimos en el post anterior, hay algunas tablas que no requieren explicación alguna, así que no las explicaré, solo explicaré aquellas que tengan el check y el default, de cualquier manera, pueden preguntarme sin ningún problema. Pues bien, comencemos con lo que nos gusta.

CREATE TABLE IF NOT EXISTS ESTADIOS(
idestadio int primary key auto_increment,
nombre varchar (100) not null,
codigopais varchar (4),
imagen varchar(100),
fecha_creacion date,
ultima_modificacion date,
capacidad long,
ciudad varchar(100),
constraint estadios_codpais_fk foreign key (codigopais) references paises (codigopais),
UNIQUE KEY `nombre_uq` (nombre , codigopais))



Como ven, creamos la tabla estadios, cuya llave primaria es el campo IDESTADIO, tiene una llave foránea que es codigopais que hace referencia a la tabla PAISES en su campo CODIGOPAIS, además tiene restricción de UNIQUE en el campo NOMBRE y CODIGOPAIS, es decir que puede haber dos estadios llamados igual, pero no en el mismo país.

CREATE TABLE IF NOT EXISTS EQUIPOS(
idequipo int auto_increment primary key,
abreviacion varchar(4) NOT NULL,
nombre varchar(100) NOT NULL,
logo varchar(100),
tipo int default 1,
codigopais varchar(4),
idestadio int,
fecha_creacion date,
fecha_fundacion date,
unique key abreviacion_unq (abreviacion),
constraint cod_pais_fk foreign key (codigopais) references paises (codigopais),
constraint equipo_estadio_fk foreign key (idestadio) references estadios (idestadio))

Concentrémonos en la siguiente línea

tipo int default 1,

Pensemos que el equipo puede ser de dos tipos, puede ser un club o una selección, si es club le pondremos el numero 1, si es selección le pondremos el número 2, este campo es un campo que también puede ser boolean y es comúnmente llamado campo bandera, mediante la instrucción default, le estamos indicando que, si no ingresamos el tipo de equipo, será por default un club, continuemos con la siguiente tabla.


CREATE TABLE IF NOT EXISTS TORNEOS(
idtorneo int auto_increment primary key,
nombre varchar(100),
fecha_inicio date,
fecha_final date,
fecha_captura date,
logo varchar(100),
sede varchar(200),
tipo int, /* 1. Liga / 2. Copa / 3. Mundial */
campeon int,
estatus int, /* 0. Abierto/ 1.Finalizado */
comentarios text,
constraint campeon_fk foreign key (campeon) references equipos (idequipo));

CREATE TABLE IF not EXISTS PARTIDOS(
idpartido int auto_increment unique,
num_partido int,
idtorneo int,
jornada varchar(10),
fecha date,
hora time,
idequipolocal int,
equipolocal varchar(100),
goleslocal int,
idequipovisitante int check (idequipovisitante <> idequipolocal),
equipovisitante varchar(100),
golesvisitante int,
tiempo_extra int default 0,
goleslocaltiempoextra int,
golesvisitantetiempoextra int,
penales int default 0,
goleslocalpenales int,
golesvisitantepenales int,
asistencia int,
ganador char(1),
idestadio int,
puntos_local int,
puntos_visitante int,
comentarios text,
activo int,
procesado int default 0,
fecha_captura date,
fecha_procesado date,
constraint partidos_pk PRIMARY KEY (fecha,hora,equipolocal,equipovisitante))

alter table partidos
ADD CONSTRAINT `equipolocal_fk` FOREIGN KEY (`idEquipoLocal`) REFERENCES `equipos` (`idequipo`),
ADD CONSTRAINT `equipovisitante_fk` FOREIGN KEY (`idequipovisitante`) REFERENCES `equipos` (`idequipo`),
ADD CONSTRAINT `partido_estadio_fk` FOREIGN KEY (`idestadio`) REFERENCES `estadios` (`idestadio`);

Presten especial atención a la siguiente instrucción

idequipovisitante int check (idequipovisitante <> idequipolocal),

Mediante esta instrucción le indicaremos a la base de datos que valide que el equipovisitante no sea igual al equipo local, ya que un equipo no puede tener partidos contra si mismo

create table if not exists puntos(
consecutivo int auto_increment primary key,
idequipo int,
puntos int,
goles_favor int,
goles_contra int,
jornada varchar(10),
idtorneo int,
idpartido int,
constraint puntos_equipo_fk foreign key (idequipo) references equipos (idequipo),
constraint puntos_idtorneo_fk foreign key (idtorneo) references torneos (idtorneo));

Hasta aquí el post queridos lectores, este es el esqueleto de la base de datos, espero se haya entendido la manera de crear tablas y las restricciones que podemos usar, en el próximo post veremos como respaldar y restaurar una base de datos.

Espero haya sido de su utilidad, compartan, den +1 y clic en algún anuncio que les interese, cualquier duda, no dudan en preguntar, estoy a sus órdenes.

Saludos


Banderas de Visitantes

Flag Counter