Está en la página 1de 31

Taller de Base de Datos ISC Unidad II

TALLER DE BASE DE DATOS


UNIDAD II
II.- LENGUAJE DE DEFINICIN DE DATOS (DDL)
2.1 Creacin De Base De Datos. DDL (Data Definition Language) Lenguaje de definicin de datos. Es el lenguaje que se usa para crear bases de datos y tablas, y para modificar sus estructuras, as como los permisos y privilegios. Este lenguaje trabaja sobre unas tablas especiales llamadas diccionario de datos. DML (Data Manipulation Language) lenguaje de manipulacin de datos. Es el que se usa para modificar y obtener datos desde las bases de datos. SQL engloba ambos lenguajes DDL+DML, ya que ambos forman parte del conjunto de sentencias de SQL. Para crear una base de datos se usa una sentencia CREATE DATABASE mysql> CREATE DATABASE prueba; Para mostrar las bases de datos existentes en nuestro sistema se usa la sentencia SHOW DATABASES mysql> SHOW DATABASES;

+-------------------+ | Database | +-------------------+ | mysql | | prueba | | test | +-------------------+ 3 rows in set (0.00 sec)

Para seleccionar una base de datos se usa el comando USE, que no es exactamente una sentencia SQL, sino ms bien de una opcin de MySQL

mysql> USE prueba; Database changed mysql>

I.T.C.J.

13

Taller de Base de Datos ISC Unidad II

2.2 Creacin De Tablas. Antes que nada se debe de saber que existen numerosos manejadores de bases de datos a saber: Oracle, Mysql, MS SQL, Access, Informix, Oracle, mSQL, postgreSQL, Sybase y otros. Existe un lenguaje llamado Lenguaje Estructurado de Consultas que es la base de todo manejador de base de datos, aunque muchas bases de datos pueden ser creadas fcilmente gracias a la interfaz grfica de los lenguajes arriba mencionados, se debera de conocer la forma de hacerlo con el lenguaje estructurado de consultas. Para crear una base de datos por ejemplo en Mysql se debe de utilizar la instruccin CREATE DATABASE nombre_base_datos que es similar en los otros manejadores de bases de datos. En MySQL es fcil trabajar si adems de este trabajas con JDBC en JAVA o la conectividad natural del mismo que es PHP. A nivel terico, existen tres lenguajes para el manejo de bases de datos: DDL (Data Definition Language) Lenguaje de definicin de datos . Es el lenguaje que se usa para crear bases de datos y tablas, y para modificar sus estructuras, as como los permisos y privilegios. Este lenguaje trabaja sobre unas tablas especiales llamadas diccionario de datos. DML (Data Manipilation Language) lenguaje de manipulacin de datos. Es el que se usa para modificar y obtener datos desde las bases de datos. DCL (Data Control Language) lenguaje de Control de Datos. Es el que se usa para establecer los derechos y accesos, as como la creacin y revocacin de las cuentas de usuario. Este lenguaje no permite infiltraciones no autorizadas en las bases de datos. Es el momento de empezar a trabajar con el SGBD, es decir, vamos a empezar a entender con MySQL. Existen muchas formas de establecer una comunicacin con el servidor de MySQL. En los programas, generalmente, se usa un API para realizar las consultas con el servidor. En PHP, por ejemplo, este API est integrado con el lenguaje, en C/C++ se trata de libreras de enlace dinmico, etc. Para usar MySQL de forma directa, mediante un cliente ejecutndose en una consola (una ventana DOS en Windows, o un Shell en otros sistemas). Se ver un ejemplo sencillo. Para ello se abre una consola y teclea mysql. (Si se esta en Windows y no est definido el camino para MySQL se tendr que hacerlo desde C:\mysql\bin). Para entrar en la consola de MySQL se requieren ciertos
I.T.C.J. 14

Taller de Base de Datos ISC Unidad II

parmetros. Hay que tener en cuenta que el servidor es multiusuario, y que cada usuario puede tener distintos privilegios, tanto de acceso a tablas como de comandos que puede utilizar. La forma general de iniciar una sesin MySQL es:

Se puede especificar al ordenador donde est el servidor de bases de datos (host) y nuestro nombre de usuario. Los parmetros "-h" y "-u" indican que los parmetros a continuacin son, respectivamente, el nombre del host y el usuario. El parmetro "-p" indica que se debe solicitar una clave de acceso. En versiones de MySQL anteriores a la 4.1.9 es posible abrir un cliente de forma annima sin especificar una contrasea. Pero esto es mala idea, y de hecho, las ltimas versiones de MySQL no lo permiten. Durante la instalacin de MySQL se pedir elegir una clave de acceso para el usuario 'root', se debe usar esa clave para iniciar una sesin con el cliente MySQL.

mysql -h localhost -u root p Enter password: ******* Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 76 to server version: 4.1.9-nt Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql>

Para salir de una sesin del cliente de MySQL se usa el comando "QUIT".
mysql> QUIT Bye C:\mysql\bin>

I.T.C.J.

15

Taller de Base de Datos ISC Unidad II

Ahora ya que se sabe entrar y salir del cliente MySQL, se puede hacer consultas. Lo ms sencillo es consultar algunas variables del sistema o el valor de algunas funciones de MySQL. Para hacer este tipo de consultas se usa la sentencia SQL SELECT, por ejemplo:
mysql> SELECT VERSION(), CURRENT_DATE; +-----------+--------------+ | VERSION() | CURRENT_DATE | +-----------+--------------+ | 4.0.15-nt | 2003-12-12 | +-----------+--------------+ 1 row in set (0.02 sec) mysql>

SELECT es la sentencia SQL para seleccionar datos de bases de datos, pero tambin se puede usar, como en este caso, para consultar variables del sistema o resultados de funciones. En este caso se ha consultado el resultado de la funcin VERSION y de la variable CURRENT_DATE. Cuando se trabaje con bases de datos reales y con aplicaciones de gestin de bases de datos, ser muy importante definir otros usuarios, adems del root, que es el administrador. Esto permitir asignar distintos privilegios a cada usuario, y ayudar a proteger las bases de datos. Se explicar el proceso para pasar del modelo lgico relacional, en forma de esquemas de relaciones, al modelo fsico, usando sentencias SQL, y viendo las peculiaridades especficas de MySQL. Cada conjunto de relaciones que componen un modelo completo forma una base de datos. Desde el punto de vista de SQL, una base de datos es slo un conjunto de relaciones (o tablas), y para organizarlas o distinguirlas se accede a ellas mediante su nombre. A nivel de sistema operativo, cada base de datos se guarda en un directorio diferente.

Debido a esto, crear una base de datos es una tarea muy simple. Claro que, en el momento de crearla, la base de datos estar vaca, es decir, no contendr ninguna tabla. Se va ha crear y manipular una base de datos, al tiempo que se familiarizar con la forma de trabajar con MySQL. Para iniciar, se crear una base de datos, y podr tener cualquier nombre. Para crear una base de datos se usa una sentencia CREATE DATABASE:
mysql> CREATE DATABASE prueba; Query OK, 1 row affected (0.03 sec) mysql>
I.T.C.J. 16

Taller de Base de Datos ISC Unidad II

Podemos averiguar cuntas bases de datos existen en nuestro sistema usando la sentencia SHOW DATABASES:
mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | mysql | | prueba | | test | +--------------------+ 3 rows in set (0.00 sec) mysql>

Al crear la Base de Datos, esto permitir obviar el nombre de la base de datos en consultas. Para seleccionar una base de datos se usa el comando USE, que no es exactamente una sentencia SQL, sino ms bien de una opcin de MySQL:

mysql> USE prueba; Database changed mysql>

Usuarios y Privilegios. Se puede por ejemplo, crear un usuario que slo tenga posibilidad de consultar datos de determinadas tablas o bases de datos, pero que no tenga permiso para aadir o modificar datos, o modificar la estructura de la base de datos. Otros usuarios podrn insertar datos, y slo algunos (o mejor, slo uno) podrn modificar la estructura de las bases de datos: los administradores. Se debe de tener cuidado con lo que se hace. Adems, hay que trabajar tan slo con las bases de datos de ejemplo. 2.1.1 Creacin de la Estructura de la Base de Datos. La estructura de una base de datos hace referencia a los tipos de datos, los vnculos o relaciones y las restricciones que deben cumplir esos datos (integridad de datos y redundancia de datos). La estructura de una base de datos es diseada o descrita empleando algn tipo de modelo de datos. Un ejemplo a modo de descripcin de la estructura de una base de datos puede ser:
I.T.C.J. 17

Taller de Base de Datos ISC Unidad II

ALUMNO: numero de alumnno (entero de 6 nmeros), nombre (cadena de 30 caracteres), apellido (cadena de 30 caracteres), ao de nacimiento (entero de 4 nmeros), especialidad (entero de 3 nmeros). ESPECIALIDAD: numero de especialidad (entero de 3 nmeros), nombre de especialidad (cadena de 30 caracteres).

En las bases de datos, una relacin o vnculo entre dos o ms entidades describen alguna interaccin entre las mismas. Por ejemplo, una relacin entre una entidad "Empleado" y una entidad "Sector" podra ser "trabaja_en", porque el empleado trabaja en un sector determinado. Las relaciones se describen en la estructura de la base de datos empleando un modelo de datos. Las relaciones son muy empleadas en los modelos de bases de datos relacionales y afines. En SQL las relaciones son llamadas tablas.

2.1.1.1- El Modelo Entidad/Relacin. El Modelo E/R es una tcnica de anlisis basada en la identificacin de las entidades y de las relaciones que se dan entre ellas en la parte de realidad que pretendemos modelar. El modelo E/R permite representar de forma abstracta los datos que se pretenden almacenar en la base de datos. Existen notaciones alternativas para la representacin grfica del diseo conseguido mediante la tcnica de anlisis que propone el modelo E/R: Diagramas E/R Diagramas UML (Lenguaje Unificado de Modelado) Diagramas CASE*Method

Elementos del modelo E/R

Entidad: Objeto, real o abstracto, distinguible de otros objetos. Al grupo de entidades con cualidades similares acerca de los cuales se almacena informacin se le denomina TIPO (o, simplemente, conjunto de entidades). Por ejemplo. Un libro concreto o un escritor.

Atributo: Propiedad asociada a un conjunto de entidades (esto es, mediante los atributos representamos propiedades de los objetos). Para cada atributo hay un conjunto de valores permitidos llamado DOMINIO.

I.T.C.J.

18

Taller de Base de Datos ISC Unidad II

Por ejemplo. Del libro: Ttulo, ISBN, edicin, nmero de pginas Del escritor: Nombre, apellidos, fecha de nacimiento

Clave: Conjunto de atributos que permite identificar unvocamente a una entidad dentro de un conjunto de entidades. Por ejemplo. Del libro: ISBN Del escritor: (nombre, apellidos, fecha de nacimiento)

Relacin (conexin o asociacin): Conexin semntica entre dos conjuntos de entidades. Por ejemplo. Relacin entre los escritores y los libros que han escrito.

Ejemplo de diseo Diseo conceptual de la estructura de la base de datos de una Facultad. NOTA: No existe una forma nica de modelar un problema. Requerimientos (Restricciones Semnticas). - Cada profesor pertenece a un solo departamento. - Todo profesor pertenece a algn departamento. - Todo departamento debe tener un director, que es un profesor. - Un profesor puede impartir varios grupos de la misma o diferente asignatura. - Un grupo de una asignatura ha de estar impartido por, al menos, un profesor. - Las asignaturas se imparten en clases en das, horas y aulas determinadas. - Los alumnos se matriculan de varias asignaturas (al menos una). - Una asignatura puede tener varios alumnos matriculados. - Los atributos de cada entidad son los habituales.

Identificacin de Entidades, Atributos y Relaciones Entidades Atributos Asignatura ID Nombre Crditos Carcter Curso Alumno DNI Nombre Direccin Beca Profesor NRP Nombre Categora rea Depart. ID Nombre Aula ID Capacidad Grupo ID Tipo ...

I.T.C.J.

19

Taller de Base de Datos ISC Unidad II

Relaciones.

Diagrama Entidad/Relacin. Notacin tradicional (omitiendo los atributos para favorecer la legibilidad del diagrama).

Notacin UML.

Representacin Grfica del Modelo E/R


I.T.C.J. 20

Taller de Base de Datos ISC Unidad II

Tipo de entidad Grupo de objetos que tienen las mismas propiedades y que en la organizacin para la que va a servir la BD tienen una existencia independiente, bien sea fsica o abstracta. Notacin

Representacin de la Cardinalidad Mxima de una Relacin. Relacin uno a uno E/R clsico

Relacin involutiva Relacin de un tipo consigo mismo.


I.T.C.J. 21

Taller de Base de Datos ISC Unidad II

E/R clsico

Claves
o

Superclave: Conjunto de atributos que permite identificar unvocamente a una entidad dentro de un conjunto de entidades. Clave candidata: Superclave con un nmero mnimo de atributos. Clave primaria: Clave candidata elegida por el diseador de la base de datos para identificar unvocamente a las distintas entidades de un tipo. Clave alternativa: Cualquiera de las claves candidatas no elegidas por el diseador de la base de datos.

o o

Ejemplos. Profesor {Nombre} no es una clave {NRP} es una clave candidata {NRP, Nombre} es una superclave
I.T.C.J. 22

Taller de Base de Datos ISC Unidad II

{Nombre, Despacho} podra serlo (o Pelcula no?) {Ttulo} no es una clave {Ttulo, gnero, ao} podra serlo {Ttulo, director, ao} es una clave

Claves de una Relacin. Las claves nos permiten diferenciar entre s las distintas entidades concepto que podramos aplicar de la siguiente forma a las relaciones: Las claves de las relaciones vienen definidas por las claves de las entidades relacionadas:

Relaciones muchos a muchos (N:M): La clave primaria ser la unin de las claves primarias de las entidades participantes en la relacin. Relaciones uno a muchos (1:N): La clave primaria de la entidad que interviene en la relacin con cardinalidad N. Relaciones uno a uno (1:1): Las claves primarias de las entidades participantes son claves candidatas de la relacin entre entidades.

Entidades Fuertes y Entidades Dbiles. Un tipo de entidad es fuerte si la existencia de sus ocurrencias no depende de ningn otro tipo. En caso contrario, se dice que el tipo de entidad es dbil.

Ejemplo.

Especializacin y Generalizacin

Supertipo Tipo de entidad que incluye uno o ms subgrupos distintos de ocurrencias que deben ser representados en el modelo de datos.

I.T.C.J.

23

Taller de Base de Datos ISC Unidad II

Subtipo Cada uno de los subgrupos de ocurrencias de un tipo de entidad que se han de representar en el modelo de datos. Especializacin Proceso de extraer diferencias entre las ocurrencias de un tipo de entidad para distinguir los subtipos que lo forman. Generalizacin Proceso de encontrar la parte comn de las ocurrencias de distintos tipos de entidad para extraer el supertipo que los engloba. Relacin de especializacin (relacin ES-UN) Relacin que se establece en un diagrama E/R entre un supertipo y sus subtipos.

Los subtipos heredan los atributos de los supertipos: Los subtipos poseen todos los atributos del supertipo ms algunos propios. La clave primaria de los subtipos es la clave primaria del supertipo.

Restricciones en las Relaciones de Herencia.

Participacin: Determina si un miembro de la superclase debe obligatoriamente ser un miembro de una subclase. Exclusividad: Determina si un miembro de una subclase puede ser a la vez miembro de otras subclases.

2.2 Creacin De Tablas.

I.T.C.J.

24

Taller de Base de Datos ISC Unidad II

La sentencia CREATE TABLE que sirve para crear tablas. La sintaxis de esta sentencia es muy compleja, ya que existen muchas opciones y tenemos muchas posibilidades diferentes a la hora de crear una tabla. Debemos indicar el nombre de la tabla y los nombres y tipos de las columnas.

mysql> CREATE TABLE gente (nombre VARCHAR(40), fecha DATE); Query OK, 0 rows affected (0.53 sec)

Podemos consultar cuntas tablas y qu nombres tienen en una base de datos, usando la sentencia SHOW TABLES.
mysql> SHOW TABLES; +-----------------------------+ | Tables_in_prueba | +-----------------------------+ | gente | +-----------------------------+ 1 row in set (0.01 sec)

La sintaxis para definir columnas es: nombre_col tipo [NOT NULL | NULL] [DEFAULT valor_por_defecto] [AUTO_INCREMENT] [[PRIMARY] KEY] [COMMENT 'string'] [definicin_referencia] Valores nulos: Al definir cada columna podemos decidir si podr o no contener valores nulos. La opcin por defecto es que se permitan valores nulos, NULL, y para que no se permitan, se usa NOT NULL. Por ejemplo:

mysql>CREATE TABLE ciudad1(nombre CHAR(20) NOT NULL, poblacion INT NULL); Query OK, 0 rows affected (0.98 sec)

Valores por defecto: Para cada columna tambin se puede definir, opcionalmente, un valor por defecto. El valor por defecto se asignar de forma automtica a una columna cuando no se especifique un valor determinado al aadir filas. Si una columna puede tener un valor nulo, y no se especifica un valor por defecto, se usar NULL como valor por defecto. En el ejemplo anterior, el valor por defecto para poblacion es NULL. Por ejemplo, si queremos que el valor por defecto para poblacin sea 5000, podemos crear la tabla como:
mysql>CREATE TABLE ciudad2(nombre CHAR(20) NOT NULL, poblacion INT NULL DEFAULT 5000);
I.T.C.J. 25

Taller de Base de Datos ISC Unidad II

Query OK, 0 rows affected (0.09 sec)

Claves primaria: Tambin se puede definir una clave primaria sobre una columna, usando la palabra clave KEY o PRIMARY KEY. Slo puede existir una clave primaria en cada tabla, y la columna sobre la que se define una clave primaria no puede tener valores NULL. Si esto no se especifica de forma explcita, MySQL lo har de forma automtica. Por ejemplo, si queremos crear un ndice en la columna nombre de la tabla de ciudades, crearemos la tabla as:

mysql> CREATE TABLE ciudad3 (nombre CHAR(20) NOT NULL PRIMARY KEY, poblacion INT NULL DEFAULT 5000); Query OK, 0 rows affected (0.20 sec) mysql> CREATE TABLE ciudad3 (nombre CHAR(20) NOT NULL, poblacion INT NULL DEFAULT 5000, PRIMARY KEY(nombre)); Query OK, 0 rows affected (0.20 sec)

Usar NOT NULL PRIMARY KEY equivale a PRIMARY KEY, NOT NULL KEY o sencillamente KEY. Columnas autoincrementadas: En MySQL tenemos la posibilidad de crear una columna autoincrementada, aunque esta columna slo puede ser de tipo entero. Si al insertar una fila se omite el valor de la columna autoincrementada o si se inserta un valor nulo para esa columna, su valor se calcula automticamente, tomando el valor ms alto de esa columna y sumndole una unidad. Esto permite crear, de una forma sencilla, una columna con un valor nico para cada fila de la tabla. Generalmente, estas columnas se usan como claves primarias 'artificiales'. MySQL est optimizado para usar valores enteros como claves primarias, de modo que la combinacin de clave primaria, que sea entera y autoincrementada es ideal para usarla como clave primaria artificial:

mysql> CREATE TABLE ciudad5 (clave INT AUTO_INCREMENT PRIMARY KEY, nombre CHAR(20) NOT NULL,poblacion INT NULL DEFAULT 5000); Query OK, 0 rows affected (0.11 sec)

Comentario: Adicionalmente, al crear la tabla, podemos aadir un comentario a cada columna. Este comentario sirve como informacin adicional sobre alguna caracterstica especial de la columna, y entra en el apartado de documentacin de la base de datos:
I.T.C.J. 26

Taller de Base de Datos ISC Unidad II

mysql> CREATE TABLE ciudad6(clave INT AUTO_INCREMENT PRIMARY KEY COMMENT 'Clave principal',nombreCHAR(50) NOT NULL, poblacion INT NULL DEFAULT 5000); Query OK, 0 rows affected (0.08 sec) mysql> show full columns from ciudad6;

Adems de los comandos: Create database, use, create table, show database y show tables, tambin son DLLs: ALTER TABLE y DROP. Alter Table
Alter table clientes change apaterno apaterno varchar(50); Alter table clientes rename tabla_clie; Alter table tabla_clie drop domicilio; Alter table tabla_clie add nombre varchar(30); Alter table clientes add index (apellido_paterno); Alter table Clientes add primary key (id_clientes); Cambia el tipo de dato o nombre de la columna. Cambia el nombre de la tabla. Elimina una columna. Aade una columna. Pone como columna indexada a apellido_paterno. Hace de id_clientes la llave primaria.

Drop
Drop table NombreTabla; Drop database NombreBd; Drop index apaterno on clients; Alter table clients drop Primary Key; Elimina una tabla. Elimina toda la base de datos. Le quita la indexacin a la columna apaterno. Borra una clave primaria (en una tabla solo existe una llave primaria por eso no se pone el nombre de la columna).

2.2.1 Integridad. DEFINICION: Se refiere a la correccin y completitud de los datos en una BD. Cuando los contenidos de una BD se modifican con sentencias INSERT, DELETE o UPDATE, la integridad de los datos almacenados puede perderse de muchas maneras diferentes. Por ejemplo: 1

Pueden aadirse datos no vlidos a la base de datos, tales como un pedido que especifica un producto no existente. Pueden modificarse datos existentes tomando un valor incorrecto, como por ejemplo si se reasigna un vendedor a una oficina no existente. Los cambios a la base de datos pueden perderse debido a un error del sistema o a un fallo en el suministro de potencia.

I.T.C.J.

27

Taller de Base de Datos ISC Unidad II

Los cambios pueden ser aplicados parcialmente, como por ejemplo si se aade un pedido de un producto sin ajustar la cantidad disponible para vender.

Una funcin importante de un DBMS (sistema gestor de la base de datos) relacional es preservar la integridad de los datos almacenados en la mayor medida posible. Para preservar la consistencia y correccin de los datos almacenados, un DBMS relacional impone generalmente una o ms restricciones de integridad de datos.

Estas restricciones restringen los valores que pueden ser insertados en la base de datos o creados mediante una actualizacin de la base de datos. Varios tipos diferentes de restricciones de integridad de datos suelen encontrarse en las bases de datos relacinales, incluyendo:

Datos requeridos: Algunas columnas en una base de datos deben contener un valor de dato vlido en cada fila, es decir, no se permite que contengan valores NULL o que falten. Pueden especificarse columnas requeridas cuando se crea un tabla, en cuyo caso, el DBMS impedir los valores NULL en esas columnas. Chequeo de validez: Cada columna de una base de datos tiene un dominio, o sea, un conjunto de valores que son legales para esa columna. El DBMS puede ser preparado para impedir otros valores de datos en estas columnas. Integridad de entidad: La clave primaria de una tabla debe contener un valor nico en cada fila, diferente de los valores de todas las filas restantes. Los valores duplicados son ilegales y el DBMS puede ser preparado para forzar esta restriccin de valores nicos. Las restricciones de integridad de entidad aseguran que la clave primaria identifique unvocamente a cada entidad representada en la base de datos. Consistencia: Muchas transacciones del mundo real producen mltiples actualizaciones a una base de datos. Las sentencias INSERT y UPDATE deben ejecutarse de modo que la base de datos contine en un estado correcto y consistente. El DBMS puede ser preparado para forzar este tipo de regla de consistencia o para soportar aplicaciones que implementen tales reglas.

I.T.C.J.

28

Taller de Base de Datos ISC Unidad II

2.2.2 Integridad Referencial Declarativa. Integridad referencial: Una clave secundaria (externa o fornea) en una base de datos relacional enlaza cada fila de la tabla hijo que contiene la clave fornea con la fila de la tabla padre que contiene el valor de clave primaria correspondiente. El DBMS puede ser preparado para forzar esta restriccin de clave fornea/clave primaria. Las restricciones de integridad referencial aseguran que las relaciones entre entidades en la base de datos se preserven durante las actualizaciones. En particular, la integridad referencial debe incluir reglas que indiquen cmo manejar la supresin de filas que son referenciadas mediante otras filas. 2.2.2.1 Problemas de Integridad Referencial Existen cuatro tipos de actualizaciones de bases de datos que pueden corromper la integridad referencial de las relaciones padre/hijo de una base de datos. 1. La insercin de una nueva fila hijo: Cuando se inserta una nueva fila en la tabla hijo, su valor de clave fornea debe coincidir con uno de los valores de clave primaria en la tabla padre. Si el valor de clave fornea no coincide con ninguna clave primaria, la insercin de la fila corromper la base de datos, ya que habr un hijo sin un padre (un hurfano). Observe que insertar una fila en la tabla padre nunca representa un problema; simplemente se convierte en un padre sin hijos. 2. La actualizacin de la clave fornea en una fila hijo: Esta es una forma diferente del problema anterior. Si la clave fornea se modifica mediante una sentencia UPDATE, el nuevo valor deber coincidir con un valor de clave primaria en la tabla padre. En caso contrario la fila actualizada ser hurfana. 3. La supresin de una fila padre: Si una fila de la tabla padre, que tiene uno o ms hijos se suprime, las filas hijo quedarn hurfanas. Los valores de clave fornea en estas filas ya no se correspondern con ningn valor de clave primaria en la tabla padre. Observe que suprimir una fila de la tabla hijo nunca representa un problema; el padre de esta fila simplemente tendr un hijo menos despus de la supresin. 4. La actualizacin de la clave primaria en una fila padre: Esta es una forma diferente del problema anterior. Si la clave primaria de una fila en la tabla padre se modifica, todos los hijos actuales de esa fila quedarn hurfanos, puesto que sus claves forneas ya no corresponden con ningn valor de clave primaria.
I.T.C.J. 29

Taller de Base de Datos ISC Unidad II

2.2.2.2 Claves Forneas en MySQL. Estrictamente hablando, para que un campo sea una clave fornea, ste necesita ser definido como tal al momento de crear una tabla. Se pueden definir claves forneas en cualquier tipo de tabla de MySQL, pero nicamente tienen sentido cuando se usan tablas del tipo InnoDB. Para trabajar con claves forneas, necesitamos hacer lo siguiente:

1. Crear ambas tablas del tipo InnoDB. 2. Usar la sintaxis FOREIGN KEY(campo_fk) REFERENCES nombre_tabla (nombre_campo). 3. Crear un ndice en el campo que ha sido declarado clave fornea.

Los ndices son necesarios para que la verificacin de las claves forneas sea ms rpida. A continuacin se muestra como definir las dos tablas de ejemplo con una clave fornea.
CREATE TABLE cliente(id_cliente INT NOT NULL, nombre VARCHAR(30), PRIMARY KEY (id_cliente)); CREATE TABLE venta(id_factura INT NOT NULL, id_cliente INT NOT NULL, cantidad INT, PRIMARY KEY(id_factura), FOREIGN KEY(id_cliente) REFERENCES cliente(id_cliente));

La sintaxis completa de una restriccin de clave fornea es la siguiente:


[CONSTRAINT smbolo] FOREIGN KEY (nombre_columna, ...) REFERENCES nombre_tabla (nombre_columna, ...) [ON DELETE {CASCADE | SET NULL | NO ACTION | RESTRICT}] [ON UPDATE {CASCADE | SET NULL | NO ACTION | RESTRICT}]

Las columnas correspondientes en la clave fornea y en la clave referenciada deben tener tipos de datos similares para que puedan ser comparadas sin la necesidad de hacer una conversin de tipos. El tamao y el signo de los tipos enteros debe ser el mismo. En las columnas de tipo caracter, el tamao no tiene que ser el mismo necesariamente. Por ejemplo, la creacin de la clave fornea en la tabla venta que se mostr anteriormente pudo haberse hecho de la siguiente manera con el uso de una sentencia ALTER TABLE:
CREATE TABLE venta (id_factura INT NOT NULL, id_cliente INT NOT NULL, cantidad INT,
I.T.C.J. 30

Taller de Base de Datos ISC Unidad II

PRIMARY KEY(id_factura), INDEX(id_cliente));

ALTER TABLE venta ADD FOREIGN KEY(id_cliente) REFERENCES cliente(id_cliente);

La integridad referencial se puede comprometer bsicamente en tres situaciones: cuando se est insertando un nuevo registro, cuando se est eliminando un registro, y cuando se est actualizando un registro. La restriccin de clave fornea que hemos definido se asegura que cuando un nuevo registro sea creado en la tabla venta, ste debe tener su correspondiente registro en la tabla cliente. Una vez que hemos creado las tablas, vamos a insertar algunos datos que nos sirvan para demostrar algunos conceptos importantes:
mysql> INSERT INTO cliente VALUES(1,'Smith John'); Query OK, 1 row affected (0.05 sec) mysql> INSERT INTO cliente VALUES(2,'ABC Corp.'); Query OK, 1 row affected (0.05 sec) mysql> INSERT INTO venta VALUES(1,1,23); Query OK, 1 row affected (0.03 sec) mysql> INSERT INTO venta VALUES(3,2,81); Query OK, 1 row affected (0.03 sec)

En este momento no hay ningn problema, sin embargo, vamos a ver que sucede cuando intentamos insertar un registro en la tabla venta que se refiera a un cliente no existente cuyo id_cliente es 3:

mysql> INSERT INTO venta VALUES(2,3,39); ERROR 1216: Cannot add or update a child row: a foreign key constraint fails

El hecho es que MySQL no nos permite insertar este registro, ya que el cliente cuyo id_cliente es 3 no existe. La restriccin de clave fornea asegura que nuestros datos mantienen su integridad. Sin embargo, qu sucede cuando eliminamos algn registro?. Vamos a agregar un nuevo cliente, y un nuevo registro en la tabla venta, posteriormente eliminaremos el registro de nuestro tercer cliente:
mysql> INSERT INTO cliente VALUES(3,'Peter Jones'); Query OK, 1 row affected (0.05 sec) mysql> INSERT INTO venta VALUES(2,3,39); Query OK, 1 row affected (0.05 sec) mysql> DELETE FROM cliente WHERE id_cliente=3; ERROR 1217: Cannot delete or update a parent row: a foreign key constraint fails
I.T.C.J. 31

Taller de Base de Datos ISC Unidad II

Debido a nuestra restriccin de clave fornea, MySQL no permite que eliminemos el registro de cliente cuyo id_cliente es 3, ya que se hace referencia a ste en la tabla venta. De nuevo, se mantiene la integridad de nuestros datos. Sin embargo existe una forma en la cul podramos hacer que la sentencia DELETE se ejecute de cualquier manera, y la veremos brevemente, pero primero necesitamos saber cmo eliminar (quitar) una clave fornea.

2.2.2.3.- Eliminacin de una Clave Fornea. No podemos slo eliminar una restriccin de clave fornea como si fuera un ndice ordinario. Veamos que sucede cuando lo intentamos.
mysql> ALTER TABLE venta DROP FOREIGN KEY; ERROR 1005: Can't create table '.test#sql-228_4.frm' (errno: 150)

Para eliminar la clave fornea se tiene que especificar el ID que ha sido generado y asignado internamente por MySQL a la clave fornea. En este caso, se puede usar la sentencia SHOW CREATE TABLE para determinar dicho ID.

mysql> SHOW CREATE TABLE venta; +--------+-----------------------------------------------------+ | Table | Create Table | +--------+-----------------------------------------------------+ | venta | CREATE TABLE 'venta' ( | | | 'id_factura' int(11) NOT NULL default '0', | | | 'id_cliente' int(11) NOT NULL default '0', | | | 'cantidad' int(11) default NULL, | | | PRIMARY KEY ('id_factura'), | | | KEY 'id_cliente' ('id_cliente'), | | | CONSTRAINT '0_22' FOREIGN KEY ('id_cliente') | | | REFERENCES 'cliente' ('id_cliente') ) TYPE=InnoDB | +-------+------------------------------------------------------+ 1 row in set (0.00 sec)

En nuestro ejemplo, la restriccin tiene el ID 0_22 (es muy probable que este valor sea diferente en cada caso).
mysql> ALTER TABLE venta DROP FOREIGN KEY 0_22; Query OK, 3 rows affected (0.23 sec) Records: 3 Duplicates: 0 Warnings: 0

I.T.C.J.

32

Taller de Base de Datos ISC Unidad II

2.2.2.4.- Eliminacin de Registros con Claves Forneas. Una de las principales bondades de las claves forneas es que permiten eliminar y actualizar registros en cascada. Con las restricciones de clave fornea podemos eliminar un registro de la tabla cliente y a la vez eliminar un registro de la tabla venta usando slo una sentencia DELETE. Esto es llamado eliminacin en cascada, en donde todos los registros relacionados son eliminados de acuerdo a las relaciones de clave fornea. Una alternativa es no eliminar los registros relacionados, y poner el valor de la clave fornea a NULL (asumiendo que el campo puede tener un valor nulo). En nuestro caso, no podemos poner el valor de nuestra clave fornea id_cliente en la tabla venta, ya que se ha definido como NOT NULL. Las opciones estndar cuando se elimina un registro con clave fornea son: ON DELETE RESTRICT ON DELETE NO ACTION ON DELETE SET DEFAULT ON DELETE CASCADE ON DELETE SET NULL ON DELETE RESTRICT es la accin predeterminada, y no permite una eliminacin si existe un registro asociado, como se mostr en el ejemplo anterior. ON DELETE NO ACTION hace lo mismo. ON DELETE SET DEFAULT actualmente no funciona en MySQL - se supone que pone el valor de la clave fornea al valor por omisin (DEFAULT) que se defini al momento de crear la tabla. Si se especifica ON DELETE CASCADE, y una fila en la tabla padre es eliminada, entonces se eliminarn las filas de la tabla hijo cuya clave fornea sea igual al valor de la clave referenciada en la tabla padre. Esta accin siempre ha estado disponible en MySQL. Si se especifica ON DELETE SET NULL, las filas en la tabla hijo son actualizadas automticamente poniendo en las columnas de la clave fornea el valor NULL. Si se especifica una accin SET NULL, debemos asegurarnos de no declarar las columnas en la tabla como NOT NULL. A continuacin se muestra un ejemplo de eliminacin en cascada:
mysql> ALTER TABLE venta ADD FOREIGN KEY(id_cliente)REFERENCES cliente(id_cliente) ON DELETE CASCADE; Query OK, 3 rows affected (0.23 sec)
I.T.C.J. 33

Taller de Base de Datos ISC Unidad II

Records: 3 Duplicates: 0 Warnings: 0

Vamos a ver como estn nuestros registros antes de ejecutar la sentencia DELETE:
mysql> SELECT * FROM cliente; +------------+--------------+ | id_cliente | nombre | +------------+--------------+ | 1 | Smith John | | 2 | Peter Jones | | 3 | ABC Corp. | +------------+--------------+ 3 rows in set (0.00 sec) mysql> SELECT * FROM venta; +------------+------------+----------+ | id_factura | id_cliente | cantidad | +------------+------------+----------+ | 1 | 1 | 23 | | 2 | 3 | 39 | | 3 | 2 | 81 | +------------+------------+----------+ 3 rows in set (0.00 sec)

Ahora eliminaremos a Pepe Pecas de la base de datos:


mysql> DELETE FROM cliente WHERE id_cliente=3; Query OK, 1 row affected (0.05 sec) mysql> SELECT * FROM venta; +------------+------------+----------+ | id_factura | id_cliente | cantidad | +------------+------------+----------+ | 1 | 1 | 23 | | 3 | 2 | 81 | +------------+------------+----------+ 2 rows in set (0.00 sec) mysql> SELECT * FROM cliente; +------------+--------------+ | id_cliente | nombre | +------------+--------------+ | 1 | Mike Jones | | 2 | ABC Corp. | +------------+--------------+ 2 rows in set (0.00 sec)

Con la eliminacin en cascada, se ha eliminado el registro de la tabla venta al que estaba relacionado Smith John.

I.T.C.J.

34

Taller de Base de Datos ISC Unidad II

2.2.2.5.- Actualizacin de Registros con Claves Forneas. Estas opciones son muy similares cuando se ejecuta una sentencia UPDATE, en lugar de una sentencia DELETE. Estas son: ON UPDATE CASCADE ON UPDATE SET NULL ON UPDATE RESTRICT Vamos a ver un ejemplo, pero antes que nada, tenemos que eliminar la restriccin de clave fornea (debemos usar el ID especfico de nuestra tabla).
mysql> ALTER TABLE venta DROP FOREIGN KEY 0_26; Query OK, 2 rows affected (0.22 sec) Records: 2 Duplicates: 0 Warnings: 0 mysql> ALTER TABLE venta ADD FOREIGN KEY(id_cliente)REFERENCES cliente(id_cliente) ON DELETE RESTRICT ON UPDATE CASCADE; Query OK, 2 rows affected (0.22 sec) Records: 2 Duplicates: 0 Warnings: 0

NOTA: Se debe especificar ON DELETE antes de ON UPDATE, ya que de otra manera se recibir un error al definir la restriccin. Ahora est lista la clave fornea para una actualizacin en cascada. Este es el ejemplo:
mysql> SELECT * FROM venta; +------------+------------+----------+ | id_factura | id_cliente | cantidad | +------------+------------+----------+ | 1 | 1 | 23 | | 3 | 2 | 81 | +------------+------------+----------+ 2 rows in set (0.00 sec) mysql> UPDATE cliente SET id_cliente=10 WHERE id_cliente=1; Query OK, 1 row affected (0.05 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> SELECT * FROM venta; +------------+------------+----------+ | id_factura | id_cliente | cantidad | +------------+------------+----------+ | 1 | 10 | 23 | | 3 | 2 | 81 | +------------+------------+----------+ 2 rows in set (0.00 sec)

I.T.C.J.

35

Taller de Base de Datos ISC Unidad II

En este caso, al actualizar el valor de id_cliente en la tabla cliente, se actualiza de manera automtica el valor de la clave fornea en la tabla venta. Esta es la actualizacin en cascada. Un ejemplo ms Observar y estudiar detenidamente el diagrama entidad/relacin de la figura que se muestra a continuacin.

Queda como ejercicio al lector verificar que a partir de este diagrama se genera un cdigo SQL similar al mostrado a continuacin, que nos sirve para la creacin de las tablas con sus correspondientes definiciones de claves forneas: Considerar que se desean hacer eliminaciones y actualizaciones en cascada, y que en la tabla poema_libro la clave primaria est formada por ambos campos (id_poema y id_libro).
CREATE TABLE libro (id_libro INT NOT NULL, titulo VARCHAR(100) NULL, precio NUMERIC(5,2) NULL, PRIMARY KEY(id_libro)); CREATE TABLE escritor (id_escritor INT NOT NULL, nombre VARCHAR(30) NULL, apellidos VARCHAR(40) NULL, direccion VARCHAR(100) NULL, PRIMARY KEY(id_escritor)); CREATE TABLE poema (id_poema INT NOT NULL, id_escritor INT NOT NULL,
I.T.C.J. 36

Taller de Base de Datos ISC Unidad II

titulo VARCHAR(50) NULL, contenido TEXT NULL, PRIMARY KEY(id_poema), INDEX(id_escritor), FOREIGN KEY(id_escritor) REFERENCES escritor(id_escritor) ON DELETE CASCADE ON UPDATE CASCADE);

CREATE TABLE poema_libro(id_poema INT NOT NULL, id_libro INT NOT NULL, PRIMARY KEY(id_poema, id_libro), INDEX (id_poema), INDEX(id_libro), FOREIGN KEY(id_poema) REFERENCES poema(id_poema) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY(id_libro) REFERENCES libro(id_libro) ON DELETE CASCADE ON UPDATE CASCADE);

2.3 Creacin de Indices. Un ndice es una estructura interna que el sistema puede usar para encontrar uno o ms registros en una tabla de forma rpida. En efecto, un ndice de base de datos es, conceptualmente, similar a un ndice encontrado al final de cualquier libro de texto. De la misma forma que el lector de un libro acudira a un ndice para determinar en qu pginas se encuentra un determinado tema, un sistema de base de datos leer un ndice para determinar las posiciones de registros seleccionados por una consulta SQL. En otras palabras, la presencia de un ndice puede ayudar al sistema a procesar algunas consultas de un modo ms eficiente. Un ndice de base de datos se crea para una columna o grupo de columnas. La figura siguiente muestra un ndice (XCNOMBRE) basado en la columna CNOMBRE de la tabla CURSO. Observemos que el ndice, a diferencia de la tabla CURSO, representa valores CNOMBRE en orden. Adems, el ndice es pequeo en relacin con el tamao de la tabla. Por lo tanto, es, probablemente, ms fcil que el sistema busque el ndice para localizar un registro con un valor CNOMBRE dado, a que explore toda la tabla en busca de ese valor. Por ejemplo, el ndice XCNOMBRE podra ser muy til al sistema cuando ejecute la siguiente sentencia SELECT.
INDICE XCNOMBRE TABLA CURSO

I.T.C.J.

37

Taller de Base de Datos ISC Unidad II

VENTAJAS DE LOS INDICES:


Acceso directo a un registro especificado. Ordenacin.

DESVENTAJAS:

Espacio de disco usado por el ndice. Costos de actualizacin.

Tenemos tres tipos de ndices. El primero corresponde a las claves primarias, que como vimos, tambin se pueden crear en la parte de definicin de columnas. La sintaxis para definir claves primarias es: definicin_columnas | PRIMARY KEY (index_nombre_col,...)
mysql> CREATE TABLE ciudad4(nombre CHAR(20) NOT NULL, poblacion INT NULL DEFAULT 5000, PRIMARY KEY (nombre));

Pero esta forma tiene ms opciones, por ejemplo, entre los parntesis podemos especificar varios nombres de columnas, para construir claves primarias compuestas por varias columnas:
mysql> CREATE TABLE mitabla1 (id1 CHAR(2) NOT NULL, id2 CHAR(2) NOT NULL, texto CHAR(30), PRIMARY KEY (id1, id2));

El segundo tipo de ndice permite definir ndices sobre una columna, sobre varias, o sobre partes de columnas. Para definir estos ndices se usan indistintamente las opciones KEY o INDEX.
I.T.C.J. 38

Taller de Base de Datos ISC Unidad II

mysql> CREATE TABLE mitabla2(id INT, nombre CHAR(19), INDEX (nombre));

o su equivalente:
mysql> CREATE TABLE mitabla3(id INT, nombre CHAR(19), KEY (nombre));

Tambin podemos crear un ndice sobre parte de una columna:


mysql> CREATE TABLE mitabla4(id INT, nombre CHAR(19), INDEX (nombre(4)));

Este ejemplo usar slo los cuatro primeros caracteres de la columna 'nombre' para crear el ndice. El tercero permite definir ndices con claves nicas, tambin sobre una columna, sobre varias o sobre partes de columnas. Para definir ndices con claves nicas se usa la opcin UNIQUE. La diferencia entre un ndice nico y uno normal es que en los nicos no se permite la insercin de filas con claves repetidas. La excepcin es el valor NULL, que s se puede repetir.
mysql> CREATE TABLE mitabla5 (id INT, nombre CHAR(19), UNIQUE (nombre));

Una clave primaria equivale a un ndice de clave nica, en la que el valor de la clave no puede tomar valores NULL. Tanto los ndices normales como los de claves nicas s pueden tomar valores NULL. Por lo tanto, las definiciones siguientes son equivalentes:
mysql> CREATE TABLE mitabla6(id INT, nombre CHAR(19) NOT NULL, UNIQUE (nombre)); mysql> CREATE TABLE mitabla7(id INT, nombre CHAR(19), PRIMARY KEY (nombre));

2.3.1.- Tipos de datos en Mysql Al disear nuestras tablas tenemos que especificar el tipo de datos y tamao que podr almacenar cada campo. Bsicamente MySQL admite dos tipos de datos: nmeros y cadenas de caracteres. Junto a estos dos grandes grupos, se admiten otros tipos de datos especiales: formatos de fecha, etc. Datos Numricos: En este tipo de campos solo pueden almacenarse nmeros, positivos o negativos, enteros o decimales, en notacin hexadecimal, cientfica o decimal.

I.T.C.J.

39

Taller de Base de Datos ISC Unidad II

Los tipos numricos tipo integer admiten los atributos SIGNED y UNSIGNED indicando en el primer caso que pueden tener valor negativo, y solo positivo en el segundo. Los tipos numricos pueden adems usar el atributo ZEROFILL en cuyo caso los nmeros se completaran hasta la mxima anchura disponible con ceros (column age INT(5) zerofill => valor 23 se almacenar como 00023) BIT o BOOL, para un nmero entero que puede ser 0 1 TINYINT es un nmero entero con rango de valores vlidos desde -128 a 127. Si se configura como unsigned (sin signo), el rango de valores es de 0 a 255. SMALLINT, para nmeros enteros, con rango desde -32768 a 32767. Si se configura como unsigned, 0 a 65535. MEDIUMINT para nmeros enteros; el rango de valores va desde -8.388608 a 8388607. Si se configura como unsigned, 0 a 16777215. INT para almacenar nmeros enteros, en un rango de -2147463846 a 2147483647. Si configuramos este dato como unsigned, el rango es 0 a 4294967295. BIGINT nmero entero con rango de valores desde -9223372036854775808 a

9223372036854775807. Unsigned, desde 0 a 18446744073709551615. FLOAT (m,d) representa nmeros decimales. Podemos especificar cuantos dgitos (m) pueden utilizarse (trmino tambin conocido como ancho de pantalla), y cuantos en la parte decimal (d). Mysql redondear el decimal para ajustarse a la capacidad. 3 DOUBLE Nmero de coma flotante de precisin doble. Es un tipo de datos igual al anterior cuya nica diferencia es el rango numrico que abarca DECIMAL almacena los nmeros como cadenas.

Caracteres O Cadenas.

I.T.C.J.

40

Taller de Base de Datos ISC Unidad II

CHAR Este tipo se utiliza para almacenar cadenas de longitud fija. Su longitud abarca desde 1 a 255 caracteres. VARCHAR Al igual que el anterior se utiliza para almacenar cadenas, en el mismo rango de 1255 caracteres, pero en este caso, de longitud variable. Un campo CHAR ocupar siempre el mximo de longitud que le hallamos asignado, aunque el tamao del dato sea menor (aadiendo espacios adicionales que sean precisos). Mientras que VARCHAR solo almacena la longitud del dato, permitiendo que el tamao de la base de datos sea menor. Eso si, el acceso a los datos CHAR es ms rpido que VARCHAR. No pueden alternarse columnas CHAR y VARCHAR en la misma tabla. Mysql cambiar las columnas CHAR a VARCHAR. Tambin cambia automticamente a CHAR si usamos VARCHAR con valor de 4 o menos. TINYTEXT, TINYBLOB para un mximo de 255 caracteres. La diferencia entre la familia de datatypes text y blob es que la primera es para cadenas de texto plano (sin formato) y case-insensitive (sin distinguir maysculas o minsculas) mientras que blob se usa para objetos binarios: cualquier tipo de datos o informacin, desde un archivo de texto con todo su formato (se diferencia en esto de el tipo Text) hasta imgenes, archivos de sonido o video. TEXT y BLOB se usa para cadenas con un rango de 255 - 65535 caracteres. La diferencia entre ambos es que TEXT permite comparar dentro de su contenido sin distinguir maysculas y minsculas, y BLOB si distingue. MEDIUMTEXT, MEDIUMBLOB textos de hasta 16777215 caracteres. LONGTEXT, LONGBLOB, hasta mximo de 4.294.967.295 caracteres

Varios

DATE para almacenar fechas. El formato por defecto es YYYY MM DD desde 0000 00 00 a 9999 12 31. DATETIME Combinacin de fecha y hora. El rango de valores va desde el 1 de enero del 1001 a las 0 horas, 0 minutos y 0 segundos al 31 de diciembre del 9999 a las 23 horas, 59 minutos y 59 segundos. El formato de almacenamiento es de ao-mes-dia horas:minutos:segundos.
I.T.C.J. 41

Taller de Base de Datos ISC Unidad II

TIMESTAMP Combinacin de fecha y hora. El rango va desde el 1 de enero de 1970 al ao 2037. El formato de almacenamiento depende del tamao del campo. TIME almacena una hora. El rango de horas va desde -838 horas, 59 minutos y 59 segundos a 838, 59 minutos y 59 segundos. El formato de almacenamiento es de 'HH:MM:SS'. YEAR almacena un ao. El rango de valores permitidos va desde el ao 1901 al ao 2155. El campo puede tener tamao dos o tamao 4 dependiendo de si queremos almacenar el ao con dos o cuatro dgitos. SET un campo que puede contener ninguno, uno varios valores de una lista. La lista puede tener un mximo de 64 valores. ENUM es igual que SET, pero solo se puede almacenar uno de los valores de la lista

Ejercicios de prctica. Realizar la siguiente base de datos llamada BIBLIOTECA Libro(ClaveLibro, Ttulo, Idioma, Formato, Categora, ClaveEditorial) Tema(ClaveTema, Nombre) Autor(ClaveAutor, Nombre) Editorial(ClaveEditorial, Nombre, Direccin, Telfono) Ejemplar(ClaveLibro, NmeroOrden, Edicin, Ubicacin) Socio(ClaveSocio, Nombre, Direccin, Telfono, Categora) Prstamo(ClaveSocio, ClaveLibro, NmeroOrden, Fecha_prstamo, Fecha_devolucin, Notas) Trata_sobre(ClaveLibro, ClaveTema) Escrito_por(ClaveLibro, ClaveAutor) los tipos para las columnas:

I.T.C.J.

42

Taller de Base de Datos ISC Unidad II

I.T.C.J.

43

También podría gustarte