Unidad 2 Lenguaje de Definición de Datos (DDL) 2.1 Creación de base de datos. 2.2 Creación de tablas. 2.2.1 Integridad. 2.2.2 Integridad referencial declarativa. 2.3 Creación de índices ISC Ing. Felipe Alanís González -ITD- 1 2.1 Creación de una Base de Datos Las instrucciones que conoceremos forman parte del Núcleo de SQL estándar (en realidad son instrucciones DDL pero es una error histórico decir que pertenecen a SQL). Puede verificar que cumplan con el núcleo en la siguiente liga: http://developer.mimer.se/validator/parser200x/index.tml La sintáxis que en estos apuntes se indique en cursiva es válida para, al menos, MySQL. ISC Ing. Felipe Alanís González -ITD- 2
2.1 Creación de una Base de Datos Instale MySQL 5.0 o superior y las GUI Tools (puede descargarlas de www.mysql.com o de ac.itdurango.edu.mx/~falanis. Si lo instala en un equipo compartido, no establezca contraseña para el administrador (root), unicamente asegúrese de que en el futuro haga respaldos de las bases de datos que estime conveniente para que no pierda su trabajo. ISC Ing. Felipe Alanís González -ITD- 3 2.1 Creación de una Base de Datos Para crear las tablas de su esquema utilice indistintamente la interfase Línea de Comandos o las GUI Tools. Al momento de crear el esquema puede usar cualquiera de ellos pero es muy importante que aprenda a utilizar ambos. Puede usar las instrucciones de las diapositivas siguientes desde ambas interfases, pero adicionalmente, las GUI Tools, cuentan con una interfase mas amigable. ISC Ing. Felipe Alanís González -ITD- 4
2.1 Creación de una Base de Datos Es muy importante que en esta etapa, la Unidad II de este curso, no añada tuplas a las tablas que aquí creará, recuerde que estamos en la etapa de planeación de la Base de Datos. ISC Ing. Felipe Alanís González -ITD- 5 2.1 Creación de una Base de Datos create database Itd use Itd Itd es el nombre, supuesto, que tendrá la Base de Datos que vamos a crear, los DBMS s (o servidores de Bases de Datos) generalmente pueden administrar mas de una Base de Datos (aunque create database no es un estándar). Hace que la Base de Datos Itd sea el esquema por omisión (es decir, todas las instrucciones que escribamos a partir de aquí, se referirán a la Base de Datos Itd. ISC Ing. Felipe Alanís González -ITD- 6
Integridad El establecimiento de llaves unique (también llamadas candidatas) para cada tabla, consigue lo que se conoce como Integridad de Entidad (contribuye a impedir duplicidad por errores de los usuarios, por ejemplo, evitar que una persona quede registrada dos o mas veces en una misma tabla de la Base de Datos). Mientras mas llaves unique posea una tabla, mayor certeza de integridad se logrará. ISC Ing. Felipe Alanís González -ITD- 7 create table Proveedores (IdProveedor int auto_increment primary key, Rfc char(13) unique, RazonSocial char(50) unique, Calle char(15), Orientacion char(10), NumeroExt numeric(8), NumeroInt char(6), Colonia char(15), Ciudad char(30), Estado char(25), CodigoPostal char(5), DiasCredito numeric(3)) ISC Ing. Felipe Alanís González -ITD- 8
El Núcleo del SQL estándar, considera una restricción de verificación (check constraint) para simular dominios y contribuir igualmente a la Integridad de Entidad. create table Proveedores ( IdProveedor..,....... Orientacion char(10), check (Orientacion in ('Norte','Sur','Oriente','Poniente')) ) ISC Ing. Felipe Alanís González -ITD- 9 Si ya existe la tabla y se desea añadir una restricción de dominio, escriba la siguiente instrucción: alter table Alumnos add constraint ValidOrientacion check (Orientacion in ('Norte', 'Sur', 'Oriente', 'Poniente')) ISC Ing. Felipe Alanís González -ITD- 10
MySQL 5 aunque soporta la restricción check, no la ejecuta, es decir, no realiza la verificación como se espera al momento de añadir o modificar tuplas. Para resolver este problema, estableceremos Integridad Referencial hacia una tabla que contenga los valores válidos para ese atributo. ISC Ing. Felipe Alanís González -ITD- 11 La definición de una llave primaria para cada tabla, es indispensable para establecer la integridad referencial. Como sabemos la integridad referencial es importantísima para evitar que haya información incompleta en la Base de Datos. ISC Ing. Felipe Alanís González -ITD- 12
Tabla Alumnos IdAlumno Control Nombre FechaNac Sexo 1 48040001 Rico Mc Pato 15/11/1900 Masculino 2 76040155 Minnie Mouse 02/06/1928 Femenino 3 76040161 Mickey Mouse 01/04/1928 Masculino Tabla PagosAlumnos IdPagosAlum IdAlumno Concepto Fecha Importe 1 1 Inscripción 02/08/1948 1.25 2 1 Inscripción 10/08/1949 1.25 3 1 Constancia 05/12/1949 0.10 4 1 Inscripción 11/08/1950 1.25 5 2 Inscripción 15/08/1976 50.00 6 2 Inscripción 05/08/1977 100.00 7 3 Inscripción 15/08/1976 50.00 8 3 Inscripción 15/08/1976 50.00 9 3 Inscripción 03/08/1977 100.00 10 3 Constancia 22/10/1977 2.00 En la tabla PagosAlumnos IdAlumno, es Llave Foránea create table PagosAlumnos( IdPagoAlumno int auto_increment primary key, IdAlumno int references Alumnos on delete restrict on update restrict, concepto char(15), fecha date, importe numeric(10,2), check........ Todas las tablas deben tener llaves unique cuál será, al menos una, llave unique de la tabla PagosAlumnos? La sintáxis estándar indicada en las diapositivas anteriores es soportada por MySQL 5.0 pero no implementada. En las diapositivas siguientes se muestra como hacerlo con MySQL 5: ISC Ing. Felipe Alanís González -ITD- 14
(como reemplazo para Check) Tabla Alumnos IdAlumno Control Nombre FechaNac Sexo 1 48040001 Rico Mc Pato 15/11/1900 Masculino 2 76040155 Minnie Mouse 02/06/1928 Femenino 3 76040161 Mickey Mouse 01/04/1928 Masculino Tabla DominioSexo Sexo Femenino Masculino create table Alumnos( IdAlumno int auto_increment primary key, sexo char(10),,, foreign key (sexo) references DominioSexo(sexo) on delete restrict on update cascade,. ) ISC Ing. Felipe Alanís González -ITD- 15 Tabla Alumnos create table PagosAlumnos( IdPagoAlumno int auto_increment primary key, IdAlumno int, Concepto char(15), fecha date,, foreign key (IdAlumno) references Alumnos(IdAlulmno) on delete restrict on update restrict,. ISC IdAlumno Control Nombre FechaNac Sexo 1 48040001 Rico Mc Pato 15/11/1900 Masculino 2 76040155 Minnie Mouse 02/06/1928 Femenino 3 76040161 Mickey Mouse 01/04/1928 Masculino Tabla PagosAlumnos IdPagosAlum IdAlumno Concepto Fecha Importe 1 1 Inscripción 02/08/1948 1.25 2 1 Inscripción 10/08/1949 1.25 3 1 Constancia 05/12/1949 0.10 4 1 Inscripción 11/08/1950 1.25 5 2 Inscripción 15/08/1976 50.00 6 2 Inscripción 05/08/1977 100.00 7 3 Inscripción 15/08/1976 50.00 8 3 Inscripción 15/08/1976 50.00 9 3 Inscripción 03/08/1977 100.00 10 3 Constancia 22/10/1977 2.00 Ing. Felipe Alanís González -ITD- Compare con el caso de la página anterior, las diferencias en on delete yon update 16
2.3 Creación de Indices Cuando establecemos llaves primarias y unique, se crean tablas de índices para poder hacer las verificaciones correspondientes, sin embargo, adicionalmente se pueden crear otras tablas de índices para que ciertas consultas tomen menos tiempo de ejecución. create table PagosAlumnos (IdPagoAlumno int(10) auto_increment primary key, IdAlumno int, Concepto char(15), Fecha date, importe numeric(10,2), foreign key (IdAlumno) references Alumnos(IdAlulmno), on delete restrict on update restrict, index (Concepto), index(fecha) ) ISC Ing. Felipe Alanís González -ITD- 17