Está en la página 1de 26

2.3.

Integridad referencial
Una vez definida la estructura de datos del modelo relacional, pasamos a estudiar las reglas de integridad, es decir que los datos almacenados en dicha estructura deben cumplir ciertas caractersticas para garantizar que son correctos. Al definir cada atributo sobre un dominio se impone una restriccin sobre el conjunto de valores permitidos para cada atributo.

A este tipo de restricciones se les denomina restricciones de dominios. Hay adems dos reglas de integridad muy importantes que se deben cumplir en todas las bases de datos relacionales y en todos sus estados o instancias (las reglas se deben cumplir todo el tiempo). Estas reglas son la regla de integridad de entidades y la regla de integridad referencial. Antes de definirlas, es preciso conocer el concepto de nulo.

Restricciones de dominios

Imponen una limitacin al conjunto de valores permitidos para los atributos en las relaciones. Permitiendo restringir los valores que puede tomar un atributo respecto a su dominio, por ejemplo EDAD >= 18.

Nulos

Cuando en una tupla un atributo es desconocido, se dice que es nulo. Un nulo no representa el valor cero ni la cadena vaca, stos son valores que tienen significado. El nulo implica ausencia de informacin, bien porque al insertar la tupla se desconoca el valor del atributo, o bien porque para dicha tupla el atributo no tiene sentido.

Ya que los nulos no son valores, deben tratarse de modo diferente, lo que causa problemas de implementacin en los SGBD relacionales.

NULL|NOT NULL. Determina si se permiten valores NULL en la columna.

ORACLE: El optimizador necesita saber que


una columna no es NOT NULL, y sin este conocimiento, se limita a elegir un plan de ejecucin inferior al ptimo.

SQL SERVER: NULL no es estrictamente


una restriccin, pero se puede especificar de la misma forma que NOT NULL. La restriccin se puede usar para las columnas calculadas slo si se especifica tambin PERSISTED.

MySQL 5.02 Si la columna puede tener


NULL como valor, la columna se define con
una clusula DEFAULT NULL explcita. En caso contrario no define DEFAULT explcito.

Restriccin UNIQUE

En un ndice UNIQUE todos los valores en el ndice deben ser distintos. Ocurre un error si intenta aadir un nuevo registro con una clave que coincida con un registro existente. La excepcin es que una columna en el ndice puede contener valores NULL mltiples

Clusula check

Un constraint check especfica una condicin en cada rengln de la tabla.

Un constraint check no puede ser definida en una vista. Un constraint check puede usar solamente columnas en las misma tabla. Un constraint check no puede ser incluida en una subconsulta.

Ejemplo: Se presentan 4 reglas de integridad de dominio.


En el primer caso la no nulidad del campo

nombreProveedor
La no nulidad de forma mplcta del campo

idProveedor al ser declarado llave primaria


(pkProveedor) La tercera regla obliga que el idProveedor este en el rango de 1,000 a 9,999 (check_id) El constraint dom_nombreProveedor obliga a que el nombre del proveedor se escriba en mayscula

CREATE TABLE proveedores ( idProveedor INTEGER(4), nombreProveedor CHAR(50) NOT NULL, CONSTRAINT pkProveedores PRIMARY KEY (idProveedor), CONSTRAINT check_id CHECK (idProveedor BETWEEN 1000 AND 9999), CONSTRAINT dom_nombreProveedor CHECK (nombreProveedor = UPPER(nombreProveedor)) ) ENGINE = InnoDB; CREATE TABLE proveedores ( idProveedor NUMBER(4), nombreProveedor CHAR(50) NOT NULL, CONSTRAINT pkProveedores PRIMARY KEY (idProveedor),

CONSTRAINT check_id CHECK (idProveedor BETWEEN 1000 AND 9999) CONSTRAINT dom_nombreProveedor CHECK (nombreProveedor = UPPER(nombreProveedor)) ); Descargar

Ejemplo: ALTER TABLE

Mediante est constraint se restrige el nombre de los proveedores validos ALTER TABLE proveedores ADD CONSTRAINT dom_nombreProveedor CHECK (nombreProveedor IN ('DELL', 'HP','IBM', 'MICROSOFT', 'SONY'));

Regla de integridad de entidades Una PRIMARY KEY es una llave nica donde todas las columnas de la clave deben definirse como NOT NULL. Si no se declaran explcitamente como NOT NULL, el gestor las declara implcitamente. Una tabla puede tener slo una

PRIMARY KEY
La primera regla de integridad se aplica a las claves primarias de las relaciones base:

ninguno de los atributos que componen la clave

primaria puede ser nulo.


Por definicin, una clave primaria es un identificador irreducible que se utiliza para identificar de modo nico las tuplas.

Irreducible significa que ningn subconjunto


de la clave primaria sirve para identificar otra tupla. Los campos que conforman una llave primaria son por defecto no nulas.

Ntese que esta regla slo se aplica a las relaciones base y a las claves primarias, no a las claves alternativas.

Regla de integridad referencial

La segunda regla de integridad se aplica a las claves ajenas o foraneas: si en una relacin hay alguna clave ajena, sus valores deben coincidir con valores de la clave primaria a la que hace referencia, o bien, deben ser completamente nulos .

La regla de integridad referencial se enmarca en trminos de estados de la base de datos: indica lo que es un estado ilegal, pero no dice cmo puede evitarse. La cuestin es qu hacer si estando en un estado legal, llega una peticin para realizar una operacin que conduce a un estado ilegal? Existen dos opciones: rechazar la operacin, o bien aceptar la operacin y realizar operaciones adicionales compensatorias que conduzcan a un estado legal.

Por lo tanto, para cada clave ajena de la base de datos habr que contestar a tres preguntas: Regla de los nulos: Los campos involucrados
en llaves primarias son por definicin no nulos.

Regla de borrado: Qu ocurre si se intenta


borrar la tupla referenciada por la clave ajena?

Restringir: no se permite borrar la tupla


referenciada.

Propagar: se borra la tupla referenciada y se


propaga el borrado a las tuplas que la referencian mediante la clave ajena -

borrado en cascada-.
Anular: se borra la tupla referenciada y las
tuplas que la referenciaban ponen a nulo la clave ajena (slo si acepta nulos) -

SET

NULL-.

Regla de modificacin: Qu ocurre si se


intenta modificar el valor de la clave primaria de la tupla referenciada por la clave ajena?

Restringir: no se permite modificar el valor de


la clave primaria de la tupla referenciada.

Propagar: se modifica el valor de la clave


primaria de la tupla referenciada y se propaga la modificacin a las tuplas que la referencian mediante la clave ajena. Oracle no permite la modificacin en cascada.

Anular: se modifica la tupla referenciada y las


tuplas que la referenciaban ponen a nulo la clave ajena (slo si acepta nulos).

En Oracle y MySQL la clausula ON DELETE dice como comportarse si se borra el registro padre:

1. Si no se especifica nada, por defecto saltar un error 2. CASCADE. Borrar los registros hijos.

Ejemplo: Considere la relacin departamentos y empleados. Es posible modificar el CONSTRAINT para que acepte el borrado en cascada.

DROP TABLE IF EXISTS empleado, departamento CREATE TABLE departamento ( idDepartamento INTEGER(3), nombre CHAR(15) NOT NULL, ciudad CHAR(10) NOT NULL, CONSTRAINT DOM_Ciudad CHECK (ciudad IN ('Veracruz', 'Xalapa', 'Orizaba', 'Regional')), CONSTRAINT PK_Departamento PRIMARY KEY (idDepartamento) ) ENGINE = InnoDB; CREATE TABLE empleado( idEmpleado INTEGER, rfc CHAR(14), nombreEmpleado CHAR(40) NOT NULL, oficio CHAR(11) NOT NULL, cargo CHAR( 9) NOT NULL, jefe INTEGER, ingreso DATE NOT NULL, salario DECIMAL(10,2), comision DECIMAL(10,2), idDepartamento INTEGER(3) NOT NULL, CONSTRAINT PK_Empleado PRIMARY KEY (idEmpleado), CONSTRAINT AK_Empleado UNIQUE (rfc),

CONSTRAINT FK_EmpJefe FOREIGN KEY (jefe) REFERENCES empleado (idEmpleado), CONSTRAINT FK_Empleado FOREIGN KEY (idDepartamento) REFERENCES departamento (idDepartamento), CONSTRAINT D_Salario CHECK ( salario > 0 ), CONSTRAINT D_NombreEmpleado CHECK (nombreEmpleado = UPPER(nombreEmpleado)) ) ENGINE = InnoDB; Descarga El cdigo para implementar el borrado es cascada si borramos un departamento borrar los empleados que laboran en el es:

ALTER TABLE empleado DROP CONSTRAINT FK_Empleado; ALTER TABLE empleado ADD CONSTRAINT FK_Empleado FOREIGN KEY (idDepartamento) REFERENCES departamento (idDepartamento) ON DELETE CASCADE; Versin Oracle

DROP TABLE empleado CASCADE CONSTRAINTS; DROP TABLE departamento CASCADE CONSTRAINTS; CREATE TABLE departamento ( idDepartamento NUMBER(3), nombre CHAR(15) NOT NULL, ciudad CHAR(10) NOT NULL, CONSTRAINT DOM_Ciudad CHECK (ciudad IN ('Veracruz', 'Xalapa', 'Orizaba', 'Regional')), CONSTRAINT PK_Departamento PRIMARY KEY (idDepartamento) ); CREATE TABLE empleado( idEmpleado NUMBER(3), rfc CHAR(14), nombreEmpleado CHAR(40) NOT NULL, oficio CHAR(11) NOT NULL,

cargo CHAR(9) NOT NULL, jefe NUMBER(3), ingreso DATE NOT NULL, salario NUMBER(10,2), comision NUMBER(10,2), idDepartamento NUMBER(3) NOT NULL, CONSTRAINT PK_Empleado PRIMARY KEY (idEmpleado), CONSTRAINT AK_Empleado UNIQUE (rfc), CONSTRAINT FK_Empleado_Jefe FOREIGN KEY (jefe) REFERENCES Empleado, CONSTRAINT FK_Empleado FOREIGN KEY (idDepartamento) REFERENCES Departamento, CONSTRAINT D_Empleado_Salario CHECK ( salario > 0 ), CONSTRAINT D_Empleado_NombreEmpleado CHECK (nombreEmpleado = UPPER(nombreEmpleado)) ); Descargar 3. SET NULL. Pondr los campos del registro hijo a null. Note que la clave ajena debe permitir el valor nulo.

Sintaxis
CONSTRAINT FK_columna FOREIGN KEY (columna1, columna2, ... columna_n) REFERENCES TablaReferenciada (columna1, columna2, ... columna_n) ON DELETE SET NULL Ejemplo: Proveedor - Producto

CREATE TABLE IF NOT EXISTS proveedor ( idProveedor INTEGER,

nombreProveedor CHAR(50) NOT NULL, contacto CHAR(50), CONSTRAINT PK_Proveedor PRIMARY KEY (idProveedor) ) ENGINE = InnoDB; CREATE TABLE IF NOT EXISTS productos ( idProducto INTEGER, idProveedor INTEGER, nombreProducto CHAR(50), precioProducto DECIMAL(8,2), CONSTRAINT PK_Productos PRIMARY KEY (idProducto), CONSTRAINT FK_Proveedor FOREIGN KEY (idProveedor) REFERENCES proveedor(idProveedor) ON DELETE SET NULL ) ENGINE = InnoDB; Descargar

DROP TABLE productos CASCADE CONSTRAINT; DROP TABLE proveedor CASCADE CONSTRAINT; CREATE TABLE proveedor ( idProveedor NUMBER(3), nombreProveedor CHAR(50) NOT NULL, contacto CHAR(50), CONSTRAINT PK_Proveedor PRIMARY KEY (idProveedor) ); CREATE TABLE productos ( idProducto NUMBER(5), idProveedor NUMBER(3), nombreProducto CHAR(50), precioProducto NUMBER(8,2), CONSTRAINT PK_Productos PRIMARY KEY (idProducto), CONSTRAINT FK_Proveedor FOREIGN KEY (idProveedor) REFERENCES proveedor (idProveedor) ON DELETE SET NULL ); Descargar Reglas de negocio

Toda aplicacin trata de reflejar parte del funcionamiento del mundo real, para automatizar tareas que de otro modo seran llevadas a cabo de modo ms ineficiente, o bien no podran realizarse. Para ello, es necesario que cada aplicacin refleje las restricciones que existen en el negocio dado, de modo que nunca sea posible llevar a cabo acciones no vlidas. A las reglas que debe seguir la aplicacin para garantizar se les denomina reglas de negocio.

Ejemplos de tales reglas son: No permitir crear facturas pertenecientes a clientes inexistentes Controlar que el saldo negativo de un cliente nunca sobrepase cierta cantidad, No emitir facturas sin RFC (Registro Federal de Causante) Limitar o cancelar los nmeros de celular no registrados Limitar el servicio telefnico por falta de pago

En realidad, la informacin puede ser manipulada por muchos programas distintos: as, una empresa puede tener un departamento de contabilidad que controle todo lo relacionado con compras, cobros, etc., y otro departamento tcnico, que est interesado en relacionar diversos parmetros de produccin con los costes.

La visin que ambos departamentos tendrn de la informacin y sus necesidades sern distintas, pero en cualquier caso siempre se debern respetar las reglas de negocio. El hecho de que la informacin sea manipulada por diversos programas hace ms difcil garantizar que todos respetan las reglas, especialmente si las aplicaciones corren en diversas mquinas, bajo distintos sistemas operativos, y estn desarrolladas con distintos lenguajes y herramientas.

Ejemplo: Considere el diagrama entidad relacin que a continuacin se expone y su correspondiente traduccin a sentencias MySQL y Oracle. El cual involucra artistas, sus discos y las canciones que contiene dicho disco.

CREATE TABLE artista ( idArtista INTEGER, nombreArtista CHAR(35) NOT NULL, CONSTRAINT pk_Artista PRIMARY KEY (idArtista), CONSTRAINT ak_nombreArtista UNIQUE ( nombreArtista ) ) ENGINE = InnoDB; CREATE TABLE disco ( asin CHAR(12), idArtista INTEGER NOT NULL, nombreAlbum CHAR(20) NOT NULL, yearLanzamiento INTEGER(4), marca CHAR(20), CONSTRAINT pk_disco PRIMARY KEY (asin), CONSTRAINT fk_artistaDisco FOREIGN KEY (idArtista) REFERENCES artista (idArtista) ) ENGINE = InnoDB; CREATE TABLE canciones ( idCancion INTEGER, asin CHAR(12) NOT NULL, nombreCancion CHAR(30) NOT NULL, duracion CHAR(6), estilo CHAR(15), CONSTRAINT pk_canciones PRIMARY KEY (idCancion), CONSTRAINT fk_DiscoCanciones FOREIGN KEY (asin) REFERENCES disco (asin) ) ENGINE = InnoDB; Descargar

CREATE TABLE artista ( idArtista NUMBER, nombreArtista CHAR(35) NOT NULL, CONSTRAINT pk_Artista PRIMARY KEY (idArtista), CONSTRAINT ak_nombreArtista UNIQUE ( nombreArtista ) ); CREATE TABLE disco ( asin CHAR(12), idArtista NUMBER NOT NULL, nombreAlbum CHAR(20) NOT NULL, yearLanzamiento NUMBER(4), marca CHAR(20), CONSTRAINT pk_disco PRIMARY KEY (asin), CONSTRAINT fk_artistaDisco FOREIGN KEY (idArtista) REFERENCES artista (idArtista) ); CREATE TABLE canciones ( idCancion NUMBER, asin CHAR(12) NOT NULL, nombreCancion CHAR(30) NOT NULL, duracion CHAR(6), estilo CHAR(15), CONSTRAINT pk_canciones PRIMARY KEY (idCancion), CONSTRAINT fk_DiscoCanciones FOREIGN KEY (asin) REFERENCES disco (asin) ); Descargar

Integridad referencial declativa


La integridad de los datos es la propiedad que asegura que informacin dada es correcta, al cumplir ciertas aserciones.

Las restricciones de integridad aseguran que la informacin contenida en una base de datos es correcta.

Las restricciones de integridad son propiedades de la base de datos que se deben satisfacer en cualquier momento.

Tanto Oracle y MySql son sistemas de gestin de base de datos (SGBD) relacional que permite la definicin de restricciones de integridad dentro del diseo de su base de datos al ser creada.

Las restricciones de integridad aseguran que la informacin contenida en la base de datos cumple ciertas normas o reglas para los diferentes estados.

Existen dos tipos de restricciones:


Estticas: limitan los estados permitidos de la Base de Datos. Dinmicas: restringen las posibles transiciones de estados de la base datos.

Para incorporar el tratamiento de las restricciones de integridad en el sistema pueden realizarse:


Aadiendo cdigo adicional para verificar y asegurar que se cumplen las restricciones (Mecanismos declarativos:

Procedure

Trigger
Declarando las restricciones como parte del esquema de la base de datos.

La definicin en la fase de diseo de las restricciones de integridad proporciona mayor nmero de ventajas, ya que:
Reduce el costo de desarrollo de software. Es ms confiable al ser centralizado y uniforme. Mantenimiento ms fcil.

De acuerdo con la forma de especificacin del comando CREATE TABLE dada anteriormente, la clusula CONSTRAINT puede entonces tener las siguientes formas: CONSTRAINT <constraint_name> PRIMARY KEY (<column_name >[,<column_name>]) CONSTRAINT <constraint_name> UNIQUE
(<column_name>[,<column_name>])

CONSTRAINT <constraint_name> FOREIGN KEY (<column_name>[,<column_name>]) REFERENCES <table_name> CONSTRAINT


(<condicin>) <constraint_name>

CHECK

Donde:
<constraint_name> es el nombre con el que se designar al CONSTRAINT en el esquema donde se crea la tabla que lo incluye. <column_name> es el nombre de una

columna de la tabla en la que se define el

CONSTRAINT
<table_name> es el nombre de una tabla definida en el esquema donde existe la tabla que incluye el CONSTRAINT. <condicin> es una expresin lgica en SQL.

En el manual de referencia de SQL usted podr encontrar informacin sobre las reglas de formacin de expresiones lgicas de SQL.

Un punto importantsimo a destacar es el de garantizar que los nombres de los CONSTRAINT sean nemnicos. Toda vez que un CONSTRAINT sea violado, el SGBD generar un mensaje de error indicando el CONSTRAINT que ha fallado. Asignar nombres nemnicos permitir hacer la depuracin de programas y la carga de datos mucho ms sencilla, adems de garantizar una perfecta cohesin entre el esquema de implantacin y la documentacin del esquema lgico. Es as como se sugiere utilizar el siguiente estndar de nomenclatura:
Para restricciones de no-nulidad se recomienda no crear CONSTRAINT sino declarar la nonulidad al momento de crear la tabla y para cada columna. Para asociar un CONSTRAINT de clave primaria a una tabla <table_name> se recomienda designar el constraint" con el nombre PK_<table_name>. Para asociar un CONSTRAINT de unicidad relacionado con una clave alterna de la tabla<table_name>, se recomienda designar el

CONSTRAINT
AK_<table_name>

con

el

nombre

Para asociar un CONSTRAINT de clave fornea a una tabla <table_name1> que

referencia a una tabla <table_name2> designe el

CONSTRAINT

con

el

nombre

FK_<table_name1>_<table_name2>. Asociar un CONSTRAINT que represente una restriccin de dominio sobre una columna <column_name> de una tabla <table_name>, se sugiere utilizar como

D_<table_name>__<column_name> nombre del CONSTRAINT

Para asociar un CONSTRAINT que represente una restriccin explcita, descrita a travs de una restriccin de tipo CHECK, de una tabla <table_name> como nombre del use constraint

EXP_<table_name>__R<constraint_number>

constraint_number> representar el nmero de restriccin explcita asociado en la

documentacin del esquema relacional que se implanta.

Los CONSTRAINT pueden ser agregados a una tabla previamente creada, o eliminados de una tabla existente. Para tal fin se pueden utilizar dos variaciones del comando ALTER TABLE, cuya sintaxis a continuacin se indica:

ALTER TABLE <table_name> ADD (<table_constraint> [,<table_constraint>]);

Permitir agregar una o ms CONSTRAINT a la tabla existente en la base de datos. Cada uno de los CONSTRAINT que se aaden a la tabla seguirn las convenciones sintcticas de la clusula <table_constraint>.

ALTER TABLE <table_name> DROP CONSTRAINT <constraint_name> [CASCADE];

Eliminar de la tabla la restriccin <constraint_name>.

Si se utiliza la clusula CASCADE, la eliminacin del CONSTRAINT tendr como efecto eliminar cualquier otro CONSTRAINT relacionado con el CONSTRAINT que se elimina.

Por ejemplo, si se elimina un CONSTRAINT de clave primaria de una tabla A bajo modalidad CONSTRAINT entonces se eliminarn los CONSTRAINT de clave fornea que referencien a A.

SOBRE LMITES

ORACLE impone los siguientes lmites en lo que respecta a los objetos descritos en esta seccin:

La longitud de cualquier identificador (nombre de tabla, nombre de columna, nombre de "constraints", entre otros) se limita a un mximo de 30 caracteres. El nmero mximo de columnas que puede tener una tabla es de 1000. El nmero mximo de columnas que pueden constituir una clave primaria, una clavealterna o una clave fornea es de 16.

Ejemplo: Torneo Primera Divisin Federacin Mexicana de Futbol

CREATE TABLE posicion ( idPosicion NUMBER(1), nombrePosicion CHAR(20) NOT NULL, CONSTRAINT PK_Posicion PRIMARY KEY (idPosicion) ); CREATE TABLE nacionalidad ( idNacionalidad NUMBER(3), nombreNacionalidad CHAR(20) NOT NULL, CONSTRAINT PK_Nacionalidad PRIMARY KEY (idNacionalidad) ); CREATE TABLE estadio ( idEstadio NUMBER(3), nombreEstadio CHAR(25) NOT NULL, direccion CHAR(35) NOT NULL, codigoPostal NUMBER(5), ciudad CHAR(30) NOT NULL, fechaInaguracion DATE,

capacidad foto CONSTRAINT );

NUMBER NOT NULL, CHAR(30), PK_Estadio PRIMARY KEY (idEstadio)

CREATE TABLE equipo ( idEquipo NUMBER, nombreEquipo CHAR(25) NOT NULL, seudonimo CHAR(25) NOT NULL, nombre_oficial CHAR(60) NOT NULL, direccion CHAR(35) NOT NULL, codigoPostal NUMBER(5), ciudad CHAR(30) NOT NULL, escudo CHAR(50), fechaFundacion DATE, paginaWeb CHAR(50) NOT NULL, CONSTRAINT PK_Equipo PRIMARY KEY (idEquipo) ); CREATE TABLE jugador ( idJugador NUMBER, nombreJugador CHAR(40), idEquipo NUMBER, idPosicion NUMBER NOT NULL, jj NUMBER DEFAULT 0, jc NUMBER DEFAULT 0, jt NUMBER DEFAULT 0, ec NUMBER DEFAULT 0, sc NUMBER DEFAULT 0, minutos NUMBER DEFAULT 0, goles NUMBER DEFAULT 0, ta NUMBER DEFAULT 0, tr NUMBER DEFAULT 0, numero NUMBER NOT NULL, fechaNacimiento DATE NOT NULL, estatura NUMBER, peso NUMBER, idNacionalidad NUMBER DEFAULT 1, CONSTRAINT PK_Jugador PRIMARY KEY (idJugador), CONSTRAINT FK_Juega_En FOREIGN KEY (idEquipo) REFERENCES equipo (idEquipo), CONSTRAINT FK_Juega_Como FOREIGN KEY (idPosicion) REFERENCES posicion (idPosicion), CONSTRAINT FK_Origen FOREIGN KEY (idNacionalidad) REFERENCES nacionalidad (idNacionalidad) );

CREATE TABLE partido ( idPartido NUMBER, jornada NUMBER(2) NOT NULL, fecha DATE NOT NULL, hora CHAR(5) NOT NULL, idLocal NUMBER(3) NOT NULL, golLocal NUMBER(2) DEFAULT 0, idVisitante NUMBER(3) NOT NULL, golVisitante NUMBER(3) DEFAULT 0, idEstadio NUMBER(3) NOT NULL, arbitro CHAR(50) NOT NULL, asistente1 CHAR(50) NOT NULL, asistentente2 CHAR(50) NOT NULL, cJuez CHAR(50), idEquipoLocal NUMBER(3) NOT NULL, idEquipoVisitante NUMBER(3) NOT NULL, CONSTRAINT PK_Partido PRIMARY KEY (idPartido), CONSTRAINT FK_Partidos_En FOREIGN KEY (idEstadio) REFERENCES estadio (idEstadio), CONSTRAINT FK_Local FOREIGN KEY (idLocal) REFERENCES equipo (idEquipo), CONSTRAINT FK_Visitante FOREIGN KEY (idVisitante) REFERENCES equipo (idEquipo) ); Descargar

CREATE TABLE

posicion ( idPosicion INTEGER(1), nombrePosicion CHAR(20) NOT NULL, CONSTRAINT PK_Posicion PRIMARY KEY (idPosicion) );

CREATE TABLE

nacionalidad ( idNacionalidad INTEGER(3), nombreNacionalidad CHAR(20) NOT NULL, CONSTRAINT PK_Nacionalidad PRIMARY KEY (idNacionalidad) );

CREATE TABLE

estadio (

idEstadio nombreEstadio direccion codigoPostal ciudad fechaInaguracion

INTEGER(3), CHAR(25) NOT NULL, CHAR(35) NOT NULL, INTEGER(5), CHAR(30) NOT NULL, DATE,

capacidad foto

CONSTRAINT
);

INTEGER NOT NULL, CHAR(30), PK_Estadio PRIMARY KEY (idEstadio)

CREATE TABLE equipo ( idEquipo INTEGER, nombreEquipo CHAR(25) NOT seudonimo CHAR(25) NOT nombre_oficial CHAR(60) NOT direccion CHAR(35) NOT codigoPostal INTEGER(5), ciudad CHAR(30) NOT

NULL, NULL, NULL,


NULL,

NULL,

escudo CHAR(50), fechaFundacion DATE, paginaWeb CHAR(50) NOT NULL, CONSTRAINT PK_Equipo PRIMARY KEY (idEquipo) );

CREATE TABLE

jugador ( idJugador INTEGER, nombreJugador CHAR(40), idEquipo INTEGER, idPosicion INTEGER NOT NULL, jj INTEGER DEFAULT 0, jc INTEGER DEFAULT 0, jt INTEGER DEFAULT 0, ec INTEGER DEFAULT 0, sc INTEGER DEFAULT 0, minutos INTEGER DEFAULT 0, goles INTEGER DEFAULT 0, ta INTEGER DEFAULT 0, tr INTEGER DEFAULT 0, numero INTEGER NOT NULL, fechaNacimiento DATE NOT NULL, estatura INTEGER, peso INTEGER, idNacionalidad INTEGER, CONSTRAINT PK_Jugador PRIMARY KEY (idJugador), CONSTRAINT FK_Juega_En FOREIGN KEY (idEquipo) REFERENCES equipo (idEquipo), CONSTRAINT FK_Juega_Como FOREIGN KEY (idPosicion) REFERENCES posicion (idPosicion),

CONSTRAINT FK_Origen FOREIGN KEY (idNacionalidad) REFERENCES nacionalidad


(idNacionalidad) );

CREATE TABLE partido ( idPartido INTEGER(5) NOT NULL, jornada INTEGER(2) NOT NULL, fecha DATE NOT NULL, hora CHAR(5) NOT NULL, idLocal INTEGER(3) NOT NULL, golLocal INTEGER(2) DEFAULT 0, idVisitante INTEGER(3) NOT NULL, golVisitante INTEGER(3) DEFAULT 0, idEstadio INTEGER(3) NOT NULL, arbitro CHAR(50) NOT NULL, asistente1 CHAR(50) NOT NULL, asistente2 CHAR(50) NOT NULL, cJuez CHAR(50), idEquipoLocal INTEGER(3) NOT NULL, idEquipoVisitante INTEGER(3) NOT NULL, CONSTRAINT PK_Partido PRIMARY KEY (idPartido), CONSTRAINT FK_Partidos_En FOREIGN KEY (idEstadio) REFERENCES estadio (idEstadio), CONSTRAINT FK_Local FOREIGN KEY (idLocal) REFERENCES equipo (idEquipo), CONSTRAINT FK_Visitante FOREIGN KEY (idVisitante) REFERENCES equipo (idEquipo)
); Descargar Ejemplo: El departamento de Postgrado e investigacin del Tecnolgico Virtual ha diseado una base de datos (BD) para la gestin de los proyectos de investigacin en los que participan sus investigadores. Se presenta a continuacin el diagrama Entidad Relacin propuesto mismo que es perfectible. Si lo hace justique sus cambios.

DROP TABLE asignado DROP DROP DROP DROP TABLE TABLE TABLE TABLE
proyecto linea investigador depAcademico linea

CASCADE CONSTRAINTS; CASCADE CASCADE CASCADE CASCADE CONSTRAINTS; CONSTRAINTS; CONSTRAINTS; CONSTRAINTS;

CREATE TABLE

( idLinea CHAR(20), nombreLinea CHAR(100) NOT NULL, financiadoPor CHAR(30) NOT NULL, CONSTRAINT PK_Linea PRIMARY KEY (idLinea) );

CREATE TABLE

proyecto ( idProyecto CHAR(20), idLinea CHAR(20) NOT NULL, nombreProyecto CHAR(100) NOT NULL, F_Inicio DATE NOT NULL, F_Terminacion DATE NOT NULL, Presupuesto NUMBER(10,0) NOT NULL, CONSTRAINT PK_Proyecto PRIMARY KEY (idProyecto),

CONSTRAINT FK_Linea REFERENCES linea (idLinea)


);

FOREIGN KEY (idLinea)

CREATE TABLE depAcademico ( idDepartamento NUMBER, Departamento CHAR(30) NOT NULL, CONSTRAINT PK_DepAcademico PRIMARY KEY
);

(idDepartamento)

CREATE TABLE

investigador ( ife CHAR(13), nombreInvestigador CHAR(50) NOT NULL, telefono CHAR(10) NOT NULL, email CHAR(50) NOT NULL, idDepartamento NUMBER NOT NULL, CONSTRAINT PK_Investigador PRIMARY KEY (ife), CONSTRAINT FK_DepAcademico FOREIGN KEY (idDepartamento) REFERENCES depAcademico (idDepartamento) );

CREATE TABLE

asignado ( ife CHAR(13) NOT NULL, idProyecto CHAR(20) NOT NULL, F_Inicio DATE NOT NULL, F_Termino DATE, tipoParticipacion CHAR(20) NOT NULL, CONSTRAINT FK_Investigador FOREIGN KEY (ife) REFERENCES investigador (ife), CONSTRAINT FK_Proyecto FOREIGN KEY (idProyecto) REFERENCES proyecto (idProyecto) );

DROP TABLE IF EXISTS asignado, proyecto, linea,


investigador, depAcademico;

CREATE TABLE

( idLinea CHAR(20), nombreLinea CHAR(100) NOT NULL, financiadoPor CHAR(30) NOT NULL, CONSTRAINT PK_Linea PRIMARY KEY (idLinea) );

linea

CREATE TABLE

proyecto ( idProyecto CHAR(20), idLinea CHAR(20) NOT NULL, nombreProyecto CHAR(100) NOT NULL, F_Inicio DATE NOT NULL, F_Terminacion DATE NOT NULL, Presupuesto DECIMAL(10,0) NOT NULL, CONSTRAINT PK_Proyecto PRIMARY KEY (idProyecto), CONSTRAINT FK_Linea FOREIGN KEY (idLinea) REFERENCES LINEA (idLinea) );

CREATE TABLE depAcademico ( idDepartamento INTEGER, Departamento CHAR(30) NOT NULL, CONSTRAINT PK_DepAcademico PRIMARY KEY
);

(idDepartamento)

CREATE TABLE

investigador ( ife CHAR(13), nombreInvestigador CHAR(50) NOT NULL, telefono CHAR(10) NOT NULL, email CHAR(50) NOT NULL, idDepartamento INTEGER NOT NULL, CONSTRAINT PK_Investigador PRIMARY KEY (ife), CONSTRAINT FK_DepAcademico FOREIGN KEY (idDepartamento) REFERENCES depAcademico (idDepartamento) );

CREATE TABLE

asignado ( ife CHAR(13) NOT NULL, idProyecto CHAR(20) NOT NULL, F_Inicio DATE NOT NULL, F_Termino DATE, tipoParticipacion CHAR(20) NOT NULL, CONSTRAINT FK_Investigador FOREIGN KEY (ife) REFERENCES investigador (ife), CONSTRAINT FK_Proyecto FOREIGN KEY (idProyecto) REFERENCES proyecto (idProyecto) );