Download Unidad 2 2.1 Creación de base de datos. 2.2 Creación de tablas
Transcript
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 Taller Bases de Datos 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. Taller Bases de Datos 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. Taller Bases de Datos 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. Taller Bases de Datos 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. Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 5 2.1 Creación de una Base de Datos create database 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). use Itd 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. Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 6 2.2 Creación de Tablas 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á. Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 7 2.2 Creación de Tablas 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)) Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 8 2.2 Creación de Tablas 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')) ) Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 9 2.2 Creación de Tablas 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')) Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 10 2.2 Creación de Tablas 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. Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 11 2.2 Creación de Tablas Integridad Referencial 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. Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 12 2.2 Creación de Tablas Integridad Referencial Tabla Alumnos IdAlumno 1 2 3 Control 48040001 76040155 76040161 Nombre Rico Mc Pato Minnie Mouse Mickey Mouse FechaNac 15/11/1900 02/06/1928 01/04/1928 Sexo Masculino Femenino Masculino En la tabla PagosAlumnos IdAlumno, es Llave Foránea create table PagosAlumnos( IdPagosAlum IdAlumno Concepto Fecha Importe IdPagoAlumno int 1 1 Inscripción 02/08/1948 1.25 auto_increment 2 1 Inscripción 10/08/1949 1.25 primary key, 3 1 Constancia 05/12/1949 0.10 IdAlumno int 4 1 Inscripción 11/08/1950 1.25 references Alumnos 5 2 Inscripción 15/08/1976 50.00 on delete restrict 6 2 Inscripción 05/08/1977 100.00 on update restrict, 7 3 Inscripción 15/08/1976 50.00 concepto char(15), 8 3 Inscripción 15/08/1976 50.00 fecha date, 9 3 Inscripción 03/08/1977 100.00 importe numeric(10,2), 10 3 Constancia 22/10/1977 2.00 check ….. ...... Todas las tablas deben tener llaves unique ¿cuál será, al menos una, llave unique de la tabla PagosAlumnos? Tabla PagosAlumnos 2.2 Creación de Tablas Integridad Referencial 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: Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 14 2.2 Creación de Tablas Integridad Referencial (como reemplazo para Check) Tabla Alumnos IdAlumno 1 2 3 Control 48040001 76040155 76040161 Nombre Rico Mc Pato Minnie Mouse Mickey Mouse FechaNac 15/11/1900 02/06/1928 01/04/1928 Sexo Masculino Femenino 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, ……. ) Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 15 2.2 Creación de Tablas Integridad Referencial Tabla Alumnos IdAlumno 1 2 3 Control 48040001 76040155 76040161 Nombre Rico Mc Pato Minnie Mouse Mickey Mouse FechaNac 15/11/1900 02/06/1928 01/04/1928 Sexo Masculino Femenino Masculino Tabla PagosAlumnos IdPagosAlum IdAlumno 1 1 2 1 3 1 4 1 5 2 6 2 7 3 8 3 9 3 10 3 Concepto Inscripción Inscripción Constancia Inscripción Inscripción Inscripción Inscripción Inscripción Inscripción Constancia Fecha 02/08/1948 10/08/1949 05/12/1949 11/08/1950 15/08/1976 05/08/1977 15/08/1976 15/08/1976 03/08/1977 22/10/1977 Importe 1.25 1.25 0.10 1.25 50.00 100.00 50.00 50.00 100.00 2.00 Compare con el caso de la página anterior, las diferencias en on delete yon update 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, …. Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 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) ) Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 17