Professional Documents
Culture Documents
Modelo Entidad-Relacin
http://creativecommons.org/licenses/by-nc-sa/3.0/deed.es_ES
Compartir bajo la misma licencia Si altera o transforma esta obra, o genera una obra
derivada, slo puede distribuir la obra generada bajo una licencia idntica a sta.
Entendiendo que:
Renuncia Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular
de los derechos de autor
Dominio Pblico Cuando la obra o alguno de sus elementos se halle en el dominio pblico
segn la ley vigente aplicable, esta situacin no quedar afectada por la licencia.
Otros derechos Los derechos siguientes no quedan afectados por la licencia de ninguna
manera:
Los derechos derivados de usos legtimos u otras limitaciones reconocidas por ley no se ven
afectados por lo anterior.
Derechos que pueden ostentar otras personas sobre la propia obra o su uso, como por
ejemplo derechos de imagen o de privacidad.
Aviso Al reutilizar o distribuir la obra, tiene que dejar bien claro los trminos de la licencia
de esta obra.
INDICE
Introduccin: ................................................................................................................................. 5
Modelo Entidad Relacin: ............................................................................................................. 5
Conceptos:................................................................................................................................. 5
Conceptos principales: .......................................................................................................... 5
Entidad .............................................................................................................................. 5
Atributo ............................................................................................................................. 6
Relacin ............................................................................................................................. 6
Conceptos secundarios: ........................................................................................................ 7
Instancia ............................................................................................................................ 7
Primary Key (sinnimos: clave primaria, UID Primario, PK, P, #) ...................................... 7
Tipo de datos ..................................................................................................................... 7
Estructura de tablas .......................................................................................................... 8
Relaciones ................................................................................................................................. 8
Relacin1:N ........................................................................................................................... 8
Varias relaciones 1:N entre dos entidades............................................................................ 9
Relacin 1:N Identificacin y Entidad dbil......................................................................... 10
Relacin 1:1 ......................................................................................................................... 10
RelacinM:N ........................................................................................................................ 11
Relacin recursiva ............................................................................................................... 13
Herencia .............................................................................................................................. 13
Arco exclusivo...................................................................................................................... 14
Herramientas: ......................................................................................................................... 15
Modelo lgico.......................................................................................................................... 19
Crear Entidades ................................................................................................................... 20
Creacin atributos ............................................................................................................... 22
Creacin de modelos ............................................................................................................... 24
Creacin de la relacin 1:N ................................................................................................. 24
Modelo lgico.................................................................................................................. 24
Modelo Relacional........................................................................................................... 27
Generacin del DDL ......................................................................................................... 29
Introducir datos en tablas de SQL Developer ................................................................. 35
Creacin de varias relaciones 1:N entre dos entidades ...................................................... 35
Modelo lgico y relacional .............................................................................................. 35
Creacin de una relacin 1:NIdentifying ............................................................................. 36
Modelo lgico .................................................................................................................. 36
Modelo relacional ........................................................................................................... 37
Creacin del DDL ............................................................................................................. 38
Creacin de una relacin 1:1 ............................................................................................... 39
Modelo lgico .................................................................................................................. 39
Modelo relacional y DDL ................................................................................................. 40
Creacin de una relacin M:N ............................................................................................. 41
Modelo lgico.................................................................................................................. 41
Modelo relacional ........................................................................................................... 43
Del modelo relacional al modelo lgico .......................................................................... 44
Creacin de una relacin recursiva ..................................................................................... 44
Modelo lgico .................................................................................................................. 44
El modelo relacional ........................................................................................................ 45
Herencia .............................................................................................................................. 45
Modelo lgico .................................................................................................................. 45
Modelo relacional ........................................................................................................... 46
Cmo hemos creado los diferentes modelos relacionales?.......................................... 47
Restricciones ....................................................................................................................... 50
Restricciones para 1 Tabla:.............................................................................................. 50
Modelo a tres tablas........................................................................................................ 55
Creacin de arco exclusivo .................................................................................................. 56
Instrucciones SQL .................................................................................................................... 58
Insert ................................................................................................................................... 58
Como exportar los insert ................................................................................................. 59
Update ................................................................................................................................. 61
Como realizar el Update .................................................................................................. 62
Usuarios y Conexiones ............................................................................................................ 63
Proyecto .................................................................................................................................. 68
Enunciado: ........................................................................................................................... 68
Modelo Lgico ..................................................................................................................... 68
Modelo relacional ............................................................................................................... 71
DDL ...................................................................................................................................... 72
Export .................................................................................................................................. 76
Introduccin:
En estos apuntes encontrars una gua para afrontar el primer parcial de base de datos
del mdulo de administracin de redes. Al final de ella debers ser capaz de entender el
modelo Entidad- Relacin. Adems aprenders a usar la herramienta SQL developer y
Data modeler para crear dicho modelo en el ordenador. La estructura de los apuntes
ser: primero el contenido terico, luego la instalacin del software y por ltimo como
hacer cada paso del modelo en el programa. Al final de cada contenido terico habr un
hipervnculo que nos lleve a como se har en el programa. Durante el desarrollo del
curso ambas cosas se irn alternando pero he credo que es ms clarificador tener toda la
teora y luego todo el desarrollo informtico. De esa forma creo que es ms rpido
encontrar el contenido. Por ltimo veremos un proyecto algo ms complejo donde
trabajaremos con las diferentes relaciones.
Fue ideado por Peter Chen en los aos 1976 y 1977 a travs de dos artculos.
Inicialmente, en la propuesta de Chen, slo se incluan los conceptos de entidad,
relacin y atributos. Despus se aadieron otros conceptos (atributos compuestos,
generalizaciones...) que forman el llamado modelo entidad relacin extendido, el cual se
conoce con las siglas ERE1.
Conceptos:
Conceptos principales:
El modelo E/R est compuesto fundamentalmente por tres conceptos:
Entidad
Una entidad es la pieza de informacin ms relevante, en funcin de la temtica de la
informacin que queramos registrar en una base de datos.
EJEMPLO
1
Extrado del libro Diseo Conceptual de Bases de Datos gua de aprendizaje. Jorge Snchez. 2004
Atributo
EJEMPLO
Para la entidad trabajador tiene sentido poner los atributos Nombre, Dni,
Sueldo,etc.
Relacin
Una relacin es un vnculo que establece una asociacin entre entidades. Se identifica
por una frase, un verbo. Las relaciones pueden ser:
Es importante darse cuenta que dos entidades pueden tener varias relaciones que las
una. Algunas sern intuitivas pero otras sern fruto de lo que queremos construir.
Debemos ser conscientes que el ordenador slo va a entender que tipo de relacin
existe(1:N, M;N, etc) pero no que esta relacionando.
EJEMPLO
Vamos a suponer que estamos estudiando una cadena comercial como podra
ser Burger King. Es coherente tener una entidad que fuera local donde
guardaramos toda la informacin correspondiente a nuestros locales (Donde se
encuentran, metros cuadrados, horarios de apertura, etc). Tambin parece lgico
tener una entidad que fuera empleados. En ella tendramos todos los datos de
nuestros empleados (nombre, fecha de nacimiento, fecha de contrato, etc).
Cuando decimos que estas dos entidades se relacionan 1:1 podemos pensar en
que un empleado puede ser director de un local y a su vez un local debe tener
un director. Pero tambin podra ser que un empleado puede ser empleado del
mes de un local y un local debe tener un empleado del mes. Con esto debemos
ver claramente que dos entidades pueden tener varias relaciones entre si y que
al crearla somos nosotros quien decidimos cuales usamos y cuales necesitamos.
El ordenador sin embargo slo ve la relacin como algo que restringes los datos
que puede recibir una entidad.
Conceptos secundarios:
Instancia
Una instancia es una pieza o conjunto de piezas de informacin concreta, que responden
a los atributos de una entidad. Es cada una de las entradas de contenido real de la
entidad. En una visualizacin como tabla, donde la entidad es la tabla y los atributos son
las columnas, las instancias son cada una de las filas que contienen los datos concretos.
EJEMPLO
Para la entidad trabajador con los atributos nombre, dni, fecha de nacimiento,
sueldo. Una instancia podra ser: El trabajador Marco Rodrguez, con Dni
31727880L, nacido 20/08/1976 y cuyo sueldo son 700 euros.
EJEMPLO
Para la entidad trabajador, ademas de los atributos nombre, sueldo hay que crear
otro que identifique inequvocamente a cada instancia. ste podra ser por
ejemplo el dni, puesto que no puede haber dos trabajadores con el mismo DNI.
Para ver un ejemplo de PK formada por varios atributos podemos tomar el caso
de un bloque de viviendas. Si tenemos una entidad llamada vivienda, stas
pueden estar identificadas por el atributo escalera junto con planta y puerta.
Para cada combinacin de escalera + planta + puerta slo habr una vivienda.
Tipo de datos
Los atributos pueden contener informacin de muchos tipos. stos son algunos de ellos,
que pertenecen al conjunto de tipos de datos lgicos:
Varchar (Varchar2): dato con formato alfanumrico (textos con letras, nmeros,
espacios y smbolos) de tamao variable. Procede del ingls
VARiableCHARacter.
o Tamao: cantidad de caracteres que puede almacenar el campo como
mximo. Es obligatorio indicar un valor puesto que si no lo hacemos
obtendremos errores.
Number (Numeric): dato con formato de nmero. Conviene utilizar slo cuando
se van a realizar operaciones matemticas con dicho nmero. Por ejemplo, un
atributo de salarios o de poblaciones de ciudades debera ser del tipo number,
pero para guardar el DNI o nmeros de telfono podra ser simplemente
varchar.
o Precisin: cantidad de dgitos que pueden componer como mximo el
nmero.
o Escala: cantidad de dgitos, del total de la precisin, que estn reservados
para los decimales del nmero.
Date: fecha.
Estructura de tablas
Si queremos ver los conceptos de entidades, atributos e instancias como una estructura
de tablas, que es como trabajan las bases de datos, nos encontramos con que una entidad
corresponde a una tabla, los atributos de una entidad o campos son las columnas de esa
tabla, y las instancias de la entidad corresponden a las filas de la tabla, en las que se
guarda la informacin concreta de cada columna o atributo.
Relaciones
Vamos ahora a ver las diferentes relaciones que existen.
Relacin1:N
Una relacin uno a muchos se establece cuando una instancia de una entidad A se
relaciona con varias instancias de otra entidad B, pero cada instancia de B slo se
relaciona con una instancia de A.
EJEMPLO
Por tanto una Foreign Key es un atributo introducido en una entidad a travs de
una relacin. La Primary Key de la entidad origen es Foreing Key en la entidad
destino.
Las Foreign Key se pueden ver en el modelo relacional. Son atributos que
aparecen con la marca F a la izquierda. Casi siempre es conveniente llamarla
igual que la primary Key de la que viene.
Entre dos entidades no tiene porquehaber solo una relacin, pueden crearse ms de una
si es necesario. En ese caso, en la entidad que recibe la PK como Foreign Key, habr
tantas Foreign Key procedentes de la otra entidad como relaciones haya, una por cada
relacin. En este caso no podemos dejarle el mismo nombre que la Primary Key de la
que viene ya que tendramos dos atributos con el mismo nombre. En este caso solemos
renombrar la FK dndole un nombre que identifique que relacin esta cumpliendo.
EJEMPLO
Una entidad dbil es una entidad estrechamente relacionada con otra. Por s misma, la
entidad dbil no tiene sentido.
La Primary Key de una entidad dbil normalmente estar formada por un atributo
propio de la entidad, y por la Primary Key de la entidad con la que est relacionada, que
actuar en la entidad dbil como Foreign Key y parte de la Primary Key a la vez. Esto
se hace mediante la relacin 1:N Identificacin.
Por tanto una relacin 1:N Identificacin es como una relacin 1:N, con la diferencia de
que la Primay Key que viaja de la entidad de origen a la entidad destino como Foreign
Key, es tambin Primay Key en esta ltima entidad. Es decir, la PK del origen es PK y
FK en el destino.
Debemos tener cuidado de no confundir dbil con irrelevante. En una academia puede
ser muy importante saber que actividades extraescolares tienen los alumnos. Pero la
entidad en si es dbil ya que no nos interesa que actividades extraescolares tienen o a
que se dedican en ella, nos interesan en relacin a nuestros alumnos. Nos interesa saber
que un alumno juega al ftbol de 17 a 18 pero que hace dentro de esa actividad nos da
igual. En general, esta relacin se usa cuando la entidad que creamos se enfoca en
funcin de otra y no como ella misma.
EJEMPLO
Si somos una empresa que vende coches y tenemos una entidad que guarda
todos los datos de nuestro coche. Tiene sentido crear una entidad que fuera
accesoriosdonde tendra guardado los tipos de accesorios que puedo montar.
Pero a su vez tendra sentido tener una entidad que fuera accesorios coche que
estuviera relacionada con los coches. De esa forma sabra que accesorios
concretos tendra cada coche.
Relacin 1:1
Una relacin 1:1 es una relacin en la que una instancia de una entidad A se relaciona
slo con otra instancia de otra entidad B, y cada instancia de B slo se relaciona
tambin con una instancia de A.
EJEMPLO
Ya hemos hablado de varias posibilidades. Por ejemplo, que una empresa tendr
un solo empleado que pueda ser Jefe y que toda empresa debe tener un jefe.
En una relacin 1:1 la PK de una entidad viaja a la otra como FK en funcin de cual de
las dos entidades sea la que tiene el rol dominante. Si una de las dos tiene el rol
dominante, ser esa la que enve su PK a la otra como FK. Si ninguna tiene rol
dominante, cada una de las dos enviar su PK, de tal modo que tambin cada una de las
dos recibir como FK la PK de la otra.
RelacinM:N
En una relacin muchos a muchos, cada instancia de una entidad A est relacionada con
una o varias instancias de otra entidad B, y viceversa, cada instancia de B est tambin
relacionada con muchas instancias de A.
EJEMPLO
Vamos a pensar en una empresa como Tussam. En ella tendremos una entidad
que ser trabajadores y otra que sern vehculos. Una relacin M:N sera:
Cuando creamos una relacin M:N, en realidad lo que creamos es una tercera entidad
que albergue cada una de las combinaciones que se produzcan entre las instancias de las
dos entidades originales.
1 Posibilidad
La Primary Key de esta nueva entidad estar formada por las PrimaryKey de las dos
entidades iniciales, que sern adems ForeignKey en la nueva entidad, ya que la
relacin entre cada una de las dos entidades iniciales y la nueva entidad es del tipo 1:N
Identificacin. Por tanto esta relacin M:N equivale a dos relaciones 1:N Identificacin
con esa nueva entidad.
2 Posibilidad
La Primary Key de esta nueva entidad estar formada por las PrimaryKey de las dos
entidades iniciales, que sern adems ForeignKeys en la nueva entidad, ya que la
relacin entre cada una de las dos entidades iniciales y la nueva entidad es del tipo 1:N
Identificacin. Pero aadimos un atributo adicional que tambin ser PrimaryKeys. Por
tanto esta relacin M:N equivale a dos relaciones 1:N Identificacin con esa nueva
entidad que a su vez tendr su propio identificador propio.
3 Posibilidad
La Primary Key de esta nueva entidad ser un atributo que nosotros aadamos y las dos
PrimaryKey de las entidades iniciales sern solo Foreign Key en la nueva entidad.
EJEMPLO
Por otra parte, cuando montamos la relacin M:N como dos relaciones 1:N
Identificacin y una tercera entidad, esas relaciones podrn ser opcionales u obligatorias
en el origen, partiendo desde las entidades iniciales. En el destino, es decir en la nueva
entidad, sern siempre obligatorias, como todas las relaciones 1:N Identificacin.
Es interesante darse cuenta que la nueva entidad que se ha creado al hacer una relacin
N:M puede a su vez relacionarse con otras entidades.
Relacin recursiva
Una relacin recursiva es una relacin que asocia a una entidad consigo misma, en lugar
de con otra entidad distinta.
EJEMPLO
Un equipo de ftbol puede tener uno o varios rivales mximos. Por ejemplo, el
Real Betis es el rival directo del Sevilla FC, o el Real Madrid es el rival directo
del Atltico de Madrid y del FC Barcelona. Pero todos son equipos de ftbol,
son instancias de la misma entidad EQUIPO. Se relacionan entre s unas
instancias con otras, de la misma entidad.
Herencia
Una herencia es una forma de organizar entidades que comparten una serie de atributos,
y que representan a subtipos de otro elemento de categora superior, tambin conocido
como supertipo. La herencia no es en si una relacin, es ms una clasificacin.
EJEMPLO
Estas subclases dentro de una clase mayor es lo que crea el concepto de herencia. En la
prctica tendremos una entidad Ordenador con los atributos que comparten todas las
subclases.
Dicho de forma ms tcnica: En una herencia, los campos compartidos por todos los
subtipos se colocan en el supertipo o entidad padre. De esta forma todos los subtipos
heredarn esos atributos, y son los campos concretos de cada subtipo los que se
colocarn en las entidades de los subtipos.
Aunque una instancia de una herencia tiene algunos de sus atributos en la entidad padre
y otros en la entidad del subtipo, la Primay Key de estas instancias estar ubicada en la
entidad padre.
Arco exclusivo
Un arco exclusivo es una restriccin que afecta a dos o ms relaciones que comparten la
entidad de destino, de tal forma que en cada instancia de la entidad de destino slo se
pueda producir una de las relaciones.
EJEMPLO
Una agencia de viajes ofreces paquetes de viaje. Estos paquetes tienen un punto de
salida. Por ejemplo Tenerife. La compaa puede ofrecer al cliente una posibilidad
para que adems del paquete pueda llegar al punto de salida. Para llegar dicho lugar
podr usar diferentes medios. En nuestro ejemplo, supongamos que puede llegar en
avin o en barco. Si la agencia tuviera inters en registrar este dato, tendramos que
asegurarnos que un cliente no haya usado dos formas de llegar. Ya que en la vida
real esto no suceder. El cliente o llegar en barco a Tenerife o lo har en Avin.
Esta eleccin es lo que conocemos como arco exclusivo.
Un arco exclusivo lo que hace en realidad es aadir una instruccin SQL al archivo
DDL que contiene la estructura de la base de datos. Dicha instruccin consiste en un
chequeo de las FK en la entidad de destino de las relaciones a las que afecta el arco
exclusivo, de tal forma que slo una de las FK puede contener informacin y las dems
deben estar vacas. O estar todas las FK implicadas vacas.
Herramientas:
Vamos a trabajar con Sqldeveloper4.1.1 que necesitar Oracle como programa de
servicio. En nuestro caso vamos usar la versinOracle 11g R2 Express Edition.
Imagen 1
Imagen 2
El nico inconveniente es que nos pedirn que nos registremos. Por suerte es gratuito.
Vemos que esta versin trae consigo una mquina virtual java. Existen versiones donde
la mquina virtual no viene integrada y es necesario tener una instalada en el ordenador.
Adems, vamos a ver que esta versin trae dentro dos programa. El propio
SQLdeveloper y otro llamadoDatamodeler. El primero nos servir para trabajar con los
datos y el segundo nos crear los modelos relacionales.
La instalacin de Oracle no tiene ningn misterio pero debemos recordar que clave le
hemos puesto a nuestro administrador ya que la necesitaremos ms adelante. La
contrasea que le pusimos este ao fue Admin2015. El puerto listener es el 1521.
Un fallo que nos podemos encontrar al utilizar SQLdeveloper es que alguno de los dos
servicios de Oracle no estn activos.
Imagen 4
Para llegar a la Imagen 4basta con pinchar en el logo de Windows, donde pone buscar
programas poner servicios y pinchar sobre servicios como podemos ver en la Imagen 5.
Imagen 5
Imagen 6
Dentro de la carpeta slo tenemos que hacer doble click en el archivo remarcado en
amarillo en la Imagen 6y se ejecutar el programa.
Como estamos dentro del grupo de bilinge vamos a trabajar con la herramienta en
ingles. Para ello necesitamos modificar el archivo ide.conf que esta dentro de
sqldeveloper\ide\bin\ . En la Imagen 6hemos remarcado en rojo el principio de la ruta.
Una vez lleguemos a la ruta, lo abrimos con el notepad. Y aadirmos al final del
documento.
AddVMOption -Duser.language=en
AddVMOption -Duser.country=US
Imagen 7
Una vez instalada nuestras herramientas vamos a aprender a usarla para crear las
relaciones que hemos explicado tericamente. Adems, vamos a ver como se
implementa la relacin en el ordenador y que consecuencias crea. Es interesante ir
mirando la teora a medida que se sigue el ejemplo ya que es vital entender que se esta
haciendo.
Modelo lgico
Para empezar a crear un mdelo lgico lo ms intuitivo sera darle a file, new pero
debemos recorda que tenemos dos programas en uno, por lo que debemos buscar donde
esta data modeler que ser la herramienta que nos ayude a crear el modelo lgico y
relacional. Por tanto, en vez darle a file, new debemos ir a view, Data Modeler, browser
como se observa en laImagen 8.
Imagen 8
Imagen 9
Si vemos la Imagen 9, podemos observar que al lado del untitled hay un + que nos
desplegar un men. Dentro de Logicalmodel le damos a Show como se ve en la
Imagen 10.
Imagen 10
Al darle se nos crea una subventana en la zona 5 con el nombre de logical (untitled).
Podemos observar la ventana en laImagen 11. Nota: Cuando guardemos el modelo, en
vez de untitled aparecer el nombre de nuestro modelo.
Imagen 11
Crear Entidades
Antes de poder crear relaciones, tenemos que tener entidades que relacionar. Vamos a
aprender como crear una entidad. Para ello pinchamos en el sobrecito con una rueda
dentada que pone New Entity. Luego pinchamos en cualquier lugar de la pgina. Todo
estos pasos podemos verlo en laImagen 12.
Imagen 12
Las entidades se nombran en singular. Los nombres deben ser cortos y claros.
No deben contener caracteres extraos o exclusivos del alfabeto espaol (,
tildes...).
Es aconsejable utilizar nombres generales para las entidades, para poder utilizar
la misma entidad para el mayor nmero de instancias posibles. Por ejemplo en
lugar 3 entidades: empleado + socio + directivo, se puede utilizar una sola:
persona.
Para nuestro proyecto vamos a seguir el criterio de Java salvo para las entidades que
siempre irn en maysculas.
Creacin atributos
Cada entidad va a tener una serie de atributos. Para crearlos nos vamos a la pestaa
attributes de la entidad. Podemos hacerlo cuando estamos creando la entidad o una vez
creada haciendo doble click sobre ella. En la Imagen 14podemos ver las opciones que
tenemos.
Imagen 14
Data Type: Es el tipo de dato. Lo normal ser elegirlogical y dentro del logical el
varchar, date, numeric son los ms frecuente.
Primary UID: Si marcamos esta opcin estamos diciendo que dicho atributo ser parte
de la Primary Key de nuestra identidad.
Imagen 15
El atributo de la Imagen 15va a identificar la identidad alumno de nuestro ejercicio. Es
un varchar de tamao 9 (es decir, podr tener 9 caracteres alfanumricos).
El atributo de la Imagen 16es el nmero de asignaturas que tiene el alumno. Sera una
variable numrica. Donde la precisin indica el nmero de cifras y la scale nos dice
cuantas de esas cifras corresponden a los decimales. Por ejemplo: un 5,2 significa 5
cifras de las cuales dos son decimales. 134,32 servira pero 1000,1 no valdra. Ni
10,134.
Imagen 16
Los nombres deben ser cortos y claros. No deben contener caracteres extraos o
exclusivos del alfabeto espaol (, tildes...).
Todos los atributos de una entidad deben tener una relacin directa con la
entidad, deben referirse a ella exclusivamente. Por ejemplo, en una entidad
cuentaBancaria no debe haber atributos email, telefono... referidos al cliente, en
su lugar estos atributos deberan estar en otra entidad cliente.
El atributo que ser o los atributos que sern nuestra PK es interesante que no
sean muy genricos. Si por ejemplo es un cdigo y la entidad es alumno. Sera
interesante poner AluCod en vez de cdigo
Imagen 17
Creacin de modelos
Vamos a ir viendo ahora como se crea cada una de las relaciones que hemos visto
tericamente. En general crearemos primero un modelo lgico, luego construiremos a
partir de este un modelo relacional. Este modelo terico sern tablas de datos en la
realidad. Para crear dichas tablas y trabajar con ellas crearemos un archivo dll que
contendr las instrucciones que debemos darle a SQLdeveloper para que las construya.
Luego veremos que instrucciones da internamente SQLdeveloper para introducir datos
en las tablas. Por ltimo, cuando tengamos datos introducidos aprenderemos a
exportarlos por si queremos llevarlos a algn otro lugar. Veremos adems, que fallos
nos indicar el programa en relacin con el tipo de relacin que estamos trabajando.
Para ello, observaremos que relaciones existen, y veremos las restricciones que se crean.
Imagen 18
Imagen 19
Hemos pinchado en el crculo naranja de laImagen 19. Luego pinchamos en una de las
entidades y nos movemos haca la otra. Observamos en la Imagen 19quese crea una
lnea negra. Al soltarla se nos abre una nueva ventana, Imagen 20, que interesa estudiar
a fondo.
Imagen 20
Cuando termines de marcar las opciones que nos interesen le damos a Ok. Al hacerlo se
nos crea la relacin que podemos observar en la Imagen 21 donde he remarcado los
elementos de inters. Si ms adelante vemos que la relacin es diferente podemos hacer
doble click en la relacin para cambiarla.
Imagen 21
Aunque en la realidad sea lgico que ambas relaciones sean un debe. Lo cierto
es que siempre usaremos puede para la entidad 1 y debe o puede para la N.
El programa no aade nada por un buen motivo. Cuando creemos las tablas y
vayamos a meter datos nos encontraramos en un bucle infinito. Si quiero aadir
vuelos necesito tener pasajeros para dicho vuelo as que tendra que crear
pasajeros que meter al vuelo. Pero cuando voy a introducir un pasajero tendr
que asignarle un vuelo que no he podido crear.
Modelo Relacional
Para crear el modelo relacional pinchamos en la doble flecha azul que vemos en la
Imagen 22y luego Engineer.
Imagen 22
Una vez creado se abrir una nueva hoja con el modelo relacional. Lo normal es que el
diagrama relacional no se vea completo.
Imagen 24
En la Imagen 24 hemos coloreado cada recuadro de un color para indicar que estamos
observando en cada uno.
Recuadro verde:contiene los atributos que tiene cada entidad. Debemos observar que en
la entidad Pasajero se ha creado un nuevo atributo debido a la relacin. Dicho atributo
lleva una F para indicar que es una Foreignkey. Por tanto, hemos corroborado que
cuando creamos una relacin 1:N, la PK de 1 viaja a la entidad N.
Recuadro gris: indica el nombre de la restriccin o constrain que crea una primarykey.
Cuando estemos introduciendo datos, si pasamos por alto rellenar el nmero o el dni,
nos dar un error. En el primer caso aparecer vuelo_pkviolated y en el segundo saldr
pasajero_pkviolated.
Recuadro azul: indica el nombre de la restriccin o constrain que crea la relacin 1:N.
Que indica que el campo FK es un campo obligatorio (podra no serlo, depende las
opciones que hayamos puesto) y que adems lo que coloquemos en el recuadro debe
existir como PK en la entidad de origen. Es decir, si en FK ponemos 001. Es porque
existe el vuelo nmero 001.
Hemos dicho que es interesante que la FK tenga el mismo nombre que la PK, pero
hemos visto que al crear la relacin, esto no sucede de forma natural. Vamos a ver como
podemos cambiar este valor, adems del nombre de las restricciones.
Imagen 25
Si hacemos doble click en un recuadro se nos abre laImagen 25. Vamos a indicar que es
lo ms interesante que podemos hacer.
General: nos permitira cambiar el nombre de la entidad. Esta opcin no parece muy
interesante pero veremos que en la relacin N:M si es muy til.
Colums: nos permite ver los atributos. Aqu es donde cambiaremos el nombre a nuestra
Foreign Key para que coincida con el nombre de nuestra Primary Key.
Para pasar la base de datos que diseamos en Data Modeler a nuestra base de datos en
SQL Developer utilizaremos los archivos DDL.
Para crearlo pinchamos en el smbolo remarcado con un cuadro verde de la Imagen 26.
O pinchamos en File, data modeler, export, dll file. Se nos abre una nueva ventana.
Imagen 26
Una vez que tenemos las instrucciones pinchamos en save. Elegimos la carpeta donde
queremos guardarlo y el nombre y le aadimos .sql.
Veamos las instrucciones que se han creado para este tipo de relacin y en que
consisten. Para ello vamos a copiar el contenido del ddl. Aqu nos encontramos con un
problema. Si pinchamos en el archivo ddl.sql y lo abrimos con el bloc de notas, veremos
que el contenido ha perdido los colores y es ms difcil entender las instrucciones. As
que es aconsejable bajarse un programa como notepad ++ para trabajar con este tipo de
archivos. Al abrirlo con este programa el archivo es ms visual.
Estas dos rdenes borran las tablas vuelo y pasajero del usuario que ejecute la orden. Si
pusiera US1:Pasajero. Borrara la tabla pasajero del usuario 1 aunque la estuviera
ejecutando el usuario 2. Aunque el usuario 2 tendra que tener los permisos suficientes
para poder realizar dicha orden.
Cascadeconstraints permite poder borrar sin que se creen conflicto con las condiciones
que relacionen dichas entidades.
CREATETABLE Pasajero
(
DNI VARCHAR2(9)NOTNULL,
NOMBRE VARCHAR2(30)NOTNULL,
FECHANACIMIENTO DATE,
NUMERO VARCHAR2(10)NOTNULL
);
Crea una tabla llamada pasajero con los atributos que vemos. Notnull indica que dicho
campo no puede dejarse en blanco.
Alter table permite alterar el contenido de una tabla. En este caso aade una constraint
(restriccin) que indica que DNI es la PK y por tanto no podr estar vaca. Pasajero_PK
ser el nombre de referencia cuando se viole dicha restriccin.
CREATETABLE Vuelo
(
NUMERO VARCHAR2(10)NOTNULL,
DESTINO VARCHAR2(30)NOTNULL,
NUMMAXPASAJERO NUMBER(3),
FECHA DATENOTNULL
);
ALTERTABLEVueloADDCONSTRAINTVuelo_PKPRIMARYKEY( NUMERO);
Aqu se aade una nueva restriccin. En este caso es aadir que numero es una
foreignkey en la tabla pasajero y que esta relacionada con el atributo numero de la tabla
vuelo.
Las lneas que vienen a continuacin podemos eliminarlas ya que no sirven para nada.
-- Oracle SQL Developer Data Modeler Summary Report:
--
-- CREATE TABLE 2
-- CREATE INDEX 0
-- ALTER TABLE 3
-- CREATE VIEW 0
-- ALTER VIEW 0
-- CREATE PACKAGE 0
-- CREATE PACKAGE BODY 0
-- CREATE PROCEDURE 0
-- CREATE FUNCTION 0
-- CREATE TRIGGER 0
-- ALTER TRIGGER 0
-- CREATE COLLECTION TYPE 0
-- CREATE STRUCTURED TYPE 0
-- CREATE STRUCTURED TYPE BODY 0
-- CREATE CLUSTER 0
-- CREATE CONTEXT 0
-- CREATE DATABASE 0
-- CREATE DIMENSION 0
-- CREATE DIRECTORY 0
-- CREATE DISK GROUP 0
-- CREATE ROLE 0
-- CREATE ROLLBACK SEGMENT 0
-- CREATE SEQUENCE 0
-- CREATE MATERIALIZED VIEW 0
-- CREATE SYNONYM 0
-- CREATE TABLESPACE 0
-- CREATE USER 0
--
-- DROP TABLESPACE 0
-- DROP DATABASE 0
--
-- REDACTION POLICY 0
--
-- ORDS DROP SCHEMA 0
-- ORDS ENABLE SCHEMA 0
-- ORDS ENABLE OBJECT 0
--
-- ERRORS 0
-- WARNINGS 0
Una vez creado el DDl, vamos a usarlo. Para ello nos vamos a file, open y buscamos el
fichero .sql que hemos creado.
Imagen 29
Imagen 30
En la Imagen 30podemos observar que slo podemos abrir archivos que tengan
extensin dmd, dmdz y xml. Por tanto, no podramos abrir nuestro *.sql
As que debemos tener cuidado y darle a open estando en start page o en la pgina de un
usuario.
Una vez que le damos a open, buscamos el archivo se nos abre una nueva ventana de
trabajo en la zona 5 como la de laImagen 31. Hemos remarcado en negro el botn que
comenzar la ejecucin de las instrucciones. Cuando pulsemos nos pedir que digamos
con que usuario queremos ejecutar las instrucciones. Una vez elegido, las instrucciones
se irn ejecutando. En la zona 3 hay un log donde se pueden ver lo que ha ocurrido. Es
interesante por si hay algn fallo. Para ejecutar las instrucciones voy a usar el usuario
USU1 que cree en su da. Como se crean usuarios est en otra zona del manual, como
vas a necesitar crear uno, pincha aqu si todava no lo tienes.
Imagen 31
Es aconsejable estar conectado solo con el usuario que queremos que ejecute las
ordenes. Cuando ejecutemos rdenes nos van a pedir que digamos con que
usuario vamos a ejecutarlas. Si la conexin esta activa, simplemente se
ejecutarn las ordenes. Sin embargo, si la conexin esta parada, nos pedir el
pasword para conectarse. Si nos hemos equivocado y no hemos dicho que se
ejecuten con el usuario que estamos conectado, que nos pida el pasword deber
ponernos sobre aviso y nos permitir cancelar la accin
Si al crear el DDL marcamos los drop, veremos que al ejecutarse por primera
vez darn error ya que no existen las tablas que queremos eliminar.
Introducir datos en tablas de SQL Developer
El tema de introduccin de datos, la exportacin de los datos y las ordenes internas las
veremos ms detalladamente cuando terminemos de ver todas las relaciones ya que
funcionan igual para cualquier tipo de relacin que hagamos. Incluso, veremos que
adems de las restricciones que crean las entidades por defecto podremos aadir
nuestras propias restricciones.
Los pasos a seguir para crear varias relaciones son los mismos que para crear una sola
relacin. Ya dijimos que de normal es interesante tener el mismo nombre en la
foreignkey la primarykey, esta es la excepcin ya que no podemos tener dos atributos
con el mismo nombre. Por eso, en este caso le pondremos a la foreignkey un nombre
que este relacionado con la misin que cumple. En las imgenes vamos a ver como
queda el modelo lgico y el relacional y como se leeran las relaciones.
Imagen 32
Imagen 33
No vamos a hablar ms sobre esta relacin porque realmente todo es igual que antes
salvo que tenemos dos en vez de una.
Modelo lgico
Imagen 35
Para crear el DDL seguimos los mismos pasos que para la relacin 1:N. Echemos un
vistazo al DDL del ejemplo y veamos que la diferencia de una relacin 1:N.
CREATETABLE P10_HIJO
(
DNI VARCHAR2(9)NOTNULL,
IDHIJO VARCHAR2(4)NOTNULL,
NOMBRE VARCHAR2(30)NOTNULL,
APELLIDO VARCHAR2(50),
F_NACIMIENTO DATE
);
ALTERTABLE P10_HIJO ADDCONSTRAINT P10_HIJO_PK PRIMARYKEY( IDHIJO, DNI
);
Aqu esta la clave. Al aadir la restriccin de Primarykey pone IDHIJO y DNI. Este
ltimo campo era la PK de la entidad Trabajador que ahora identifica a la tabla hijo.
CREATETABLE P10_TRABAJADOR
(
DNI VARCHAR2(9)NOTNULL,
NOMBRE VARCHAR2(30)NOTNULL,
APELLIDO VARCHAR2(50),
CARGO VARCHAR2(30),
SUELDO NUMBER(6,2)NOTNULL
);
ALTERTABLE P10_TRABAJADOR ADDCONSTRAINT P10_TRABAJADOR_PK PRIMARYKEY(
DNI);
Una vez creado el DDL.sql, seguiremos los mismos pasos que para la relacin 1:N.
Como ya dijimos antes, la introduccin de datos lo veremos al final de todas las
entidades.
Imagen 37
La duda principal que nos debe surgir es que ocurre en este caso con las Primary Key.
Para responder vamos a mirar la Imagen 38. La clave para responder a esa pregunta
esta en el campo Dominant Role. Aqu podemos indicar si alguna de las dos entidades
juega un rol dominante en la relacin. El rol que pongamos como dominante mandar
su PK a la otra entidad como FK.
Si dejamos ese campo con none, es decir, que no indicamos un rol dominante. El
programa tomar como rol dominante la entidad que tiene el puede frente a la que tiene
un debe.
Pero qu sucede si ambas tienen debe o ambas tienen puede? En ese caso cada entidad
mandar su PK a la otra entidad.
Imagen 38
Vamos a ver como se muestra esto en el modelo relacional (Imagen 39,Imagen 40) y en
los DDL.
CREATETABLE PERSONAL
(
IDPER VARCHAR2(4)NOTNULL,
NOMBRE VARCHAR2(40)NOTNULL
);
ALTERTABLE PERSONAL ADDCONSTRAINT PERSONAL_PK PRIMARYKEY( IDPER);
CREATETABLE SUCURSAL
(
IDSUC VARCHAR2(4)NOTNULL,
DIRECCION VARCHAR2(100),
IDPER VARCHAR2(4)NOTNULL
);
CREATEUNIQUEINDEX SUCURSAL__IDX ON SUCURSAL
(
IDPER ASC
)
Aqu esta la clave que nos introduce el 1:1. Gracias a esta instruccin cada elemento de
una entidad solo podr estar relacionado con uno de la otra entidad. En nuestro ejemplo,
distintas sucursales no podrn tener el mismo IDPER.
;
ALTERTABLE SUCURSAL ADDCONSTRAINT SUCURSAL_PK PRIMARYKEY( IDSUC);
Las opciones que vemos dentro de la entidad son las que ya hemos trabajado en las
anteriores relaciones. Lo nico que se suele cambiar es que sean ambas opcionales o no.
Sin embargo si nos fijamos en la Imagen 42 vemos que la relacin puede llevar
atributos. Hasta ahora hemos omitido esta opcin ya que no tena mucho sentido. Sin
embargo en este tipo de relacin puede ser til. Como ya hemos comentado en la teora,
esta relacin crea una nueva relacin que podr contener sus nuevos atributos. Una
opcin para crear esos atributos es aadirlos a la relacin. Luego cuando creemos el
modelo relacional veremos que la nueva relacin, llevar esos atributos.
Imagen 42
Modelo relacional
Imagen 43
Si hacemos doble click en la relacin nueva y nos vamos a atributo, nos encontramos
con la Imagen 44. Aqu podemos tomar varias decisiones. Pero la ms importante es
cambiar si las dos FK que vienen de nuestras dos entidades son adems PK o no lo son.
Para ello basta con desmarcar la opcin PK. Adems, si queremos que alguno de los
nuevos atributos sea PK, basta con pinchar en el y marcar la opcin PK.
Imagen 44
Del modelo relacional al modelo lgico
Como ya hemos indicado esta nueva relacin podemos relacionarla con otras entidades
que creemos en el futuro. La pregunta es como podemos hacer esto, si la nueva relacin
ha aparecido en el modelo relacional. Los pasos a seguir son:
5. Pulsar
6. Darle a Engineer. Obtenemos la Imagen 45
Imagen 45
Ahora la entidad AutoConductor es una entidad ms con la que podemos trabajar. Las
PK no se observan en el modelo lgico ya que vienen de la relacin 1:NIdentifying que
tienen con Autobus y Conductor.
Para crear el modelo lgico basta con seguir los siguientes pasos:
Imagen 46
Herencia
Modelo lgico
Modelo relacional
1. Estrategia de Tabla nica: la entidad padre y las entidades de los subtipos del
modelo lgico se convierten en el modelo relacional en una sola entidad con
todos los atributos.
Imagen 48
2. Estrategia de Tabla por Secundario (una tabla por cada subtipo): la entidad padre
y las entidades de los subtipos del modelo lgico se convierten en el modelo
relacional en una entidad por cada subtipo, en las que se repiten todos los
atributos de la entidad padre.
Imagen 49
3. Estrategia de Tabla para cada Entidad: la entidad padre y las entidades de los
subtipos del modelo lgico se convierten en el modelo relacional en una entidad
para cada subtipo y otra entidad para el supertipo. La entidad del supertipo est
relacionada con cada entidad subtipo mediante una relacin 1:1 Identificacin.
Imagen 50
Tenemos dos formas de hacerlo. Cuando pulsamos nos sale la Imagen 51. En el
recuadro marrn podemos ver que la entidad padre est marcada y en el recuadro rojo
podemos ver que las dos entidades que heredan del padre tambin estn marcadas. As
es como nos lo da el programa por defecto y nos crear la estrategia de Tabla para cada
Entidad. Si desmarcamos la entidad padre se nos crear la estrategia de Tabla por
Secundario (una tabla por cada subtipo). Mientras que si dejamos marcado la entidad
padre y desmarcamos los subtipos de entidades se nos crear la estrategia de Tabla
nica.
La otra forma de conseguir el mismo efecto es pinchar sobre la entidad en el modelo
lgico. Irse a la opcin Enginer To y marcar o desmarcar que participe en la realizacin
del modelo relacional. Si la marcamos participa y si lo desmarcamos no participa.
Vemos que podramos incluso desmarcar algn subtipo y marcar otros. Esto creara una
sola tabla con los atributos de la entidad padre y la de los subtitpos no marcados y otra
tabla por cada entidad marcada.
En la Imagen 50 vemos una especie de arco. Es el intento de crear un arco exclusivo que
impida que el mismo IdOrdenador aparezca en ambas tablas. Por desgracia, este no
funciona ya no tiene campos para gestionarlo por lo que no lo podra implementarse en
el DDL. Lo eliminaremos y veremos ms adelante como crear restricciones que nos
ayuden a evitar estos problemas.
Imagen 51
CONSEJOS Y BUENAS PRCTICAS
La estrategia de una tabla por entidad es la que ms tablas genera, pero cuando
hemos descartado la estrategia de una tabla nica, la estrategia de una tabla por
entidad es ms conveniente que la de una tabla por secundario cuando las
relaciones de la base de datos tienen como origen o destino a la entidad del
supertipo en lugar de a los subtipos, puesto que al pasar al modelo relacional,
cada relacin con el supertipo se convierte en tantas relaciones distintas como
subtipos haya, complicando la estructura general en exceso. La estrategia de
una tabla por entidad tambin permite que existan instancias que no pertenezcan
a ningn subtipo, cuando slo se rellenan los campos de la entidad del
supertipo, y se dejan vacos los de los subtipos.
Imagen 52
Imagen 53
Lo primero que podemos observar es que CP1 y CS2 han dejado de ser obligatorias.
Adems, ahora mismo nada nos impide rellenar un ordenador que tenga contenido en
todos los atributos.
Para evitar esto vamos a crear restricciones en una tabla. Esto podr hacerse en tres
niveles.
1. En el modelo relacional.
2. En el DDL.
3. En la tabla que crea tras ejecutar el DDL.
Si lo creamos en el primer nivel se implantar en los otros dos niveles. Si lo
implementamos en el segundo nivel, se generar tambin en el tercero. Lo normal, es
crearlo en el modelo relacional que nos permite si queremos no exportarlo al resto de
niveles.
Imagen 54
Si pinchamos sobre se aade una restriccin en la zona roja. En este caso hemos
creado 4. El name es el nombre que va a tener dicha restriccin. A la hora de introducir
datos, si no cumplen la restriccin este ser el nombre que salte. La validation Rule
indica que chequeo se esta haciendo. El contenido de este chequeo se introduce en la
zona azul y tras darle a apply se ver arriba. A la derecha vemos Generate in DLL. Si lo
desmarcamos es como sino hubiramos creado dicha restriccin ya que no trascender
al DDL y por tanto a las tablas.
Lo primero que queremos controlar es que el usuario no pueda rellenar los campos CP1,
CP2 y a la vez CS1 y CS2.
Nombre: Arco
(TP = 'S' AND CP1 IS NULL AND CP2 IS NULL) OR (TP = 'P' AND CS1 IS
NULL AND CS2 IS NULL)
Esta regla nos dice que: el campo TP debe valer S y en ese caso CP1 y CP2 deben estar
vacos o que el campo TP debe valer P y en ese caso CS1 y CS2 deben estar vacos.
Nombre Arco1:
TP = 'S' AND CP1 IS NULL AND CP2 IS NULL
Nombre Arco1:
TP = 'P' AND CS1 IS NULL AND CS2 IS NULL
Por eso es importante decir que ocurra una u otra. Esa opcin la de el OR.
Si observamos un un DDL vemos que para que un campo sea obligatorio basta con
decir con decir que dicho campo sea no nulo. EJ: CP1 is not null. Como podemos llevar
esto a la herencia. En nuestro ejemplo queremos que el campo CP1 sea obligatorio y
que el campo CS2 sea obligatorio.
Nombre: CampoObligatorio
CP1 IS NOT NULL OR CS2 IS NOT NULL
Esta restriccin nos dice que tenemos dos opciones. O que el atributo CP1 tenga
contenido por fuerza o que tenga lo tenga CS2. Podramos entonces rellenar en un
porttil el campo CS2. Si solo existiera esta restriccin si, pero al existir tambin la
restriccin Arco. Sabemos que si el tipo es P, el campo CS2 no va a poder tener
contenido por lo que obligatoriamente tendr que cumplirse la otra condicin.
En la herencia vemos que es interesante que la primary key del padre empiece por S o
por P para indicar que hacen referencia a un porttil o a un sobremesa.
IO LIKE 'P%' OR IO LIKE 'S%'
O si queremos darle ms contundencia:
(IO LIKE 'P%' AND TP = 'P') OR (IO LIKE 'S%' AND TP = 'S')
Que adems de obligar a la PK a empezar por P o por S, indica que si empieza por P el
tipo debe ser P y si empieza por S el tipo debe ser S.
Pero y si no pudiramos tampoco obligar esto ltimo. Si el cliente ya usa una PK,
seguramente no podamos obligarle a que la cambie. De hecho, a veces ser porque es
ilgico hacerlo. Si para colmo no podemos introducir un campo, nos encontramos con
un problema. Observemos el motivo:
Nombre: Arco
(CP1 IS NULL AND CP2 IS NULL) OR (CS1 IS NULL AND CS2 IS NULL)
Nombre: Campoobligatorio
CP1 IS NOT NULL OR CS2 IS NOT NULL
Arriba vemos como se quedaran nuestras dos restricciones al quitar el campo TP.
Yo podra poner un ordenador 01 (porttil) donde podra rellenar los campos CS1,CS2
solamente. Ya que no incumple Arco y tampoco Campoobligatorio. Es obvio que 01 no
debe ser porttil ya que tiene los campos rellenos de un sobremesa. En este caso, lo
normal es confiar en la buena fe del usuario que usa nuestra base de datos.
Tanto si existe el campo TP como sino, podramos haber creado una nica restriccin
que incluyera la obligatoriedad de campos y el arco. Esto no es aconsejable ya que si
algo falla es ms complicado encontrar el error. Aun as, un ejemplo sera:
(CP1 IS NULL AND CP2 IS NULL AND CS2 IS NOT NULL) OR (CS1 IS NULL AND
CS2 IS NULL AND CP1 IS NOT NULL)
Adems de estas restricciones podramos crear cualquier otra que se nos ocurra. Que un
atributo numrico no sea superior o inferior a una cifra. Que los valores de cierto
atributo tenga unos nombre prefijados.
Siempre que podamos debemos evitar que el usuario nos pueda introducir basura en
nuestra base de datos aunque siempre recordando que el usuario tambin es inteligente.
Creacin en el DDL
Veamos la estructura que toma una restriccin creada por nosotros en el DDL.
ALTER TABLE Ordenador ADD CONSTRAINT CampoObligatorio CHECK ((TP = 'P'
AND CP1 IS NOT NULL) OR (TP = 'S' AND CS2 IS NOT NULL)) ;
La orden Alter table que hemos reseado en Amarillo ya la conocamos. Indica la tabla
sobre la que vamos a introducir la restriccin o constraint.
Por ltimo dentro del Check escribimos la condicin en lenguaje SQL. Acabando en ;.
Imagen 55
Constraint name: Nombre de la restriccin que servir para dar el aviso si la violamos.
Imagen 56
Vamos a ver que restricciones son interesantes crear para el modelo 3 tres tablas. Lo que
queremos evitar es que en un ordenador que hemos dado de alta en HOrdenador con la
intencin de que sea HP, sea usado por HS y viceversa.
En la tabla Hordenador:
(TP = 'P' AND IO LIKE 'P%') OR (TP = 'S' AND IO LIKE 'S%')
En la tabla HP:
IO LIKE 'P%'
En la tabla HS:
IO LIKE 'S%'
Vemos que la nica forma de conseguir nuestro objetivo es introducir una condicin a
la Primary Key de la entidad padre ya que ser el nico campo presente en las dos
entidades hijos.
Creacin de arco exclusivo
Pasos a seguir:
Imagen 57
Imagen 58
El modelo relacional podemos observarlo en la Imagen 59. Salvo el arco que se ha
creado, no tiene nada relevante. Lo ms interesante lo vamos a ver en el DDL.
Imagen 59
Restriccin en el DDL:
ALTER TABLE Viaje ADD CONSTRAINT Arc_1 CHECK ( ( (IdBarco IS NOT NULL)
AND (IdAvion IS NULL) ) OR ( (IdAvion IS NOT NULL) AND (IdBarco IS
NULL) ) ) ;
Podemos observar que la restriccin tiene la misma forma que las que creamos de forma
personalizada. En este caso, nos indica que la tabla Viaje solo podr tener contenido o
en la IdBarco o en la IdAvion.
Pero que sucede si el usuario ha ido al punto de salida del viaje por su cuenta. Ahora
mismo la compaa tendra un problema ya que debe tener relleno uno de los dos
campos. Lo primero, es que en este caso el modelo lgico estara mal ya que las
relaciones 1:N deberan haber sido opcionales en los dos extremos. Esto habra hecho
que las FK que han viajado no tuvieran que tener contenido obligatoriamente. Por tanto,
el primer paso para crear un arco que contemple esta posibilidad ser poner opcionales
las dos relaciones 1:N. El modelo relacional no cambia de apariencia. Pero sin embargo
al mirar la restriccin que se crea, vemos una diferencia.
ALTER TABLE Viaje ADD CONSTRAINT Arc_2 CHECK ( ( (Avion_IdAvion IS NOT
NULL) AND (Barco_IdBarco IS NULL) ) OR ( (Barco_IdBarco IS NOT NULL)
AND (Avion_IdAvion IS NULL) ) OR ( (Avion_IdAvion IS NULL) AND
(Barco_IdBarco IS NULL) ) ) ;
Ahora existe una opcin nueva, que es dejar ambos campos a cero.
Instrucciones SQL
En el modelo 1:N ya vimos que ordenes ejecuta SQL para crear tablas (crate), para
borrarlas (drop) , como alterar el contenido de la tabla (alter), aadir restricciones
(addconstrain). Ahora vamos a ver como insertar datos en la tabla o cambiarlos gracias
a las instrucciones insert y update.
Hay que tener en cuenta que estas dos instrucciones (insert y update) son transparente
para el usuario cuando estamos trabajando a travs del programa. Pero podemos crear
un fichero *.Sql que cargue las instrucciones y al ejecutarlo se introduzcan. Lo normal
es que los update se hagan en el programa directamente. Pero para llevarnos los datos,
solemos exportarlos como instrucciones insert que luego se ejecutaran donde queramos
tener esos datos. Veamos pues como insertar datos, actualizarlos y exportarlos.
Por ltimo veremos como aadir restricciones a una tabla para que no podamos aadir
los valores que queramos sino que estemos limitados.
Insert
Al igual que con los archivos DDL tenemos un conjunto de instrucciones SQL que
permiten definir la estructura de una base de datos, tambin surge la necesidad de poder
almacenar en un archivo los datos de dichas bases de datos. Para esto sirve la
instruccin INSERT, que es una instruccin de SQL con la que podemos guardar datos.
Si tenemos relaciones entre tablas, de tal forma que haya campos en unas tablas que
sean ForeingKeys que procedan de otras tablas, a la hora de generar el archivo que
contenga todos los INSERT habr que colocar primero los de las tablas origen de las
relaciones (los que contienen las PK que luego sern FK en otras tablas) y despus se
colocarn los INSERT de las tablas destino (los que contienen las FK). Si no hace con
el orden adecuado, al intentar ejecutar el SQL en una base de datos para introducir los
datos, obtendremos errores.
Como exportar los insert
Imagen 60
Imagen 61
Esta orden significa que se inserte en la tabla del usuario US1 llamada P6_Profesor los
datos que le siguen.
Si la orden la ejecuta el usuario US1. No dar error si la tabla existe y los datos son
correctos.
Ambas cosas tienen sus pro y sus contras. En el primer caso, si queremos exportar los
datos a otro ordenador, debemos hacerlo con el mismo nombre de usuario para que los
datos se inserten bien. Si esto no ocurre, tendremos un error. Esto que puede parecer una
desventaja, tambin puede evitar que introduzcamos datos en una tabla de otro usuario
que sin querer. Supongamos que tenemos dos usuarios US1 y US2 con una tabla
P6_PROFESOR. Si ejecutamos la primer orden con US2 el dato no funcionar o se
introducir en la tabla P6_PROFESOR de US1. En el segundo caso el dato se
introducir en la tabla P6_PROFESOR de US2. Por tanto, si quitamos el usuario
tenemos que tener cuidado aunque de forma general parece ms interesante.
Update
A veces se puede dar el caso, al crear un archivo SQL mediante instrucciones INSERT
para guardar los datos de una base de datos, que a pesar de ordenar correctamente los
INSERT, no podamos introducir todos los datos, debido a que haya instancias que
necesiten ser introducidas en varios pasos.
EJEMPLO
Imaginamos que tenemos la entidad EQUIPO con los datos de los equipos de
ftbol, y que tenemos la entidad JUGADOR con los datos de todos los
jugadores. Entre ambas entidades existe una relacin 1:N con obligatoriedad en
el lado del JUGADOR, de tal forma que un equipo puede tener uno o ms
jugadores, y un jugador debe pertenecer a un equipo.
Si queremos registrar tambin qu jugador es el capitn de cada equipo,
podemos hacerlo estableciendo una nueva relacin entre ambas entidades del
tipo 1:1 con la opcionalidad activada y como rol dominante el JUGADOR, ya
que un equipo puede tener un capitn, y un jugador puede ser capitn de un
equipo. Nos encontraramos en un caso con dos entidades, y dos relaciones
entre esas dos entidades (1:N y 1:1).
Si queremos introducir datos en las tablas de la base de datos, no podramos
empezar introduciendo jugadores, puesto que necesitan pertenecer a un equipo
obligatoriamente, y los equipos todava no estn creados. Si por el contrario
introducimos primero los equipos no podramos establecer el capitn, puesto
que todava no existen los jugadores.
El orden correcto supone introducir primero los equipos, luego los jugadores, y
por ltimo modificar los equipos para establecer los capitanes. En un archivo
SQL que contenga esos datos, el orden debe ser el mismo.
La instruccin UPDATE es una orden de SQL que permite modificar las instancias, que
previamente se han introducido mediante INSERT. De esta forma podemos introducir
correctamente los datos que necesiten de varios pasos para ser creados, porque estn
vinculados a las filas de otras tablas que necesitan haber sido introducidas para poder
hacer referencia a las mismas.
Como realizar el Update
UPDATE nombreDeLaTabla
nombreDeLaColumnaModificada2 = valorModificado2,
...nombreDeLaColumnaModificadaM = valorModificadoN
Para utilizarla, lo que hay que hacer es abrir con un editor de texto el archivo SQL
generado con SQL Developer mediante instrucciones INSERT, para ubicar donde sea
necesario las instrucciones UPDATE.
EJEMPLO
Imagen 62
Si exportamos los datos el orden lgico sera, dato de los equipos y luego datos de los
jugadores.
Insertinto PROYECTO.EQUIPO
(IDEQUIPO,NOMBRE,CIUDAD,NUMEROSOCIOS,PRESUPUESTO,DNI,IDESTADIO,IDCIUDADDEP,RI
VALMAXIMO) values ('RBB','Real Betis Balompie','Sevilla','40000',15000000,'10','1',null,null);
El problema al ejecutarse esa instruccin viene en el 10 que hemos remarcado. Ese 10 hace
referencia al dni de un jugador que todava no se ha introducido.
La solucin es dejar ese campo null y posteriormente cuando se haya creado el jugador con
DNI 10 actualizarlo con la instruccin update.
UPDATE "EQUIPO"
set DNI = 10
where IDEQUIPO = 'RBB';
Esto parece solucionar el problema de crear un bucle infinito que hemos comentado varias
veces durante los apuntes. Sin embargo, esta solucin la tiene que hacer el usuario a mano,
por eso el programa nunca va a crearla a priori. La solucin como vemos, es identificar los
campos que van a incumplir una restriccin, borrarlos antes de exportar los datos y
posteriormente aadir al final del DDl una instruccin UPDATE por cada valor borrado.
Usuarios y Conexiones
En una base de datos suele existir un usuario que es el administrador que tiene control
total sobre la base de datos y luego otra serie de usuarios que tendrn unos permisos
restringidos. Oracle tiene un usuario administrador por defecto que se llama SYS. Para
poder trabajar con dicho usuario debemos crear una conexin con el. Veamos como
creamos una conexin.
Imagen 63
Para crear una conexin pinchamos en la cruz verde o le damos al botn derecho en
connections, new connection y nos sale una ventana que podemos observar en la
Imagen 64
Imagen 64
Username: Es el nombre del usuario que realizar la conexin con la base de datos. En
nuestro caso ser SYS. Veremos que sys puede crear nuevo usuarios para el futuro.
Role: Aunque existen varios roles nosotros slo vamos a usar SYSDBA y Default. El
usuario SYS ser SYSDBA y el resto de usuarios que creemos sern Default.
Test: Comprueba que los datos son correctos y la conexin se realizar con xito.
Imagen 65
ConfirmPassword: Sirve para confirmar que no nos hemos equivocado al poner nuestra
contrasea.
Default tablespace: Vamos a darle users. Si vamos a tener un ayudante solemos crear un
usuario con tablespacesystem.
TemporyTablespace: TEMP
Una vez creado el usuario es interesante crear una conexin para dicho usuario.
Ya hemos visto el procedimiento, recuerda dejar el campo rol en default.
Por defecto Oracle trae un usuario llamado system cuya contrasea, igual que
para SYS, es la que introdujimos en la instalacin. Si nos conectamos con dicho
usuario podemos cambiar la contrasea de SYS.
Proyecto
Enunciado:
Una academia est interesada en controlar las clases que da, cuantos alumnos asisten,
quien las da. Adems le interesa las comunicacin entre alumnos y profesores por
email. A la hora de fijar los horarios de las clases, debemos tener en cuenta que los
alumnos tienen actividades extraescolares que conviene conocer. Como existen
becarios, interesa saber quien es el responsable de dicho becario. De las clases adems
no interesa saber el turno, el da, donde se dan. Sera interesante introducir datos
generales de las localizaciones por si ms tarde queremos introducir las tutoras que se
suelen hacer en despachos.
Modelo Lgico
Relacin 1 y 2:
Ha sido creada a partir de una relacin 1:N entre la entidad Asignatura y Trabajador.
Relacin 4 (1:N):
Relacin 5 (1:N):
Relacin 6 (1:N):
Relacin 7 (N:M):
No hemos puedo la relacin que se crea porque no vamos a relacionarla con nadie. Se
ver luego en el modelo relacional.
La realidad es que un email puede tener uno o varios email de destino. Pero por
simplificar hemos decidido quedarnos con una versin simplificada para poner de
manifiesto la doble relacin 1:N entre dos entidades.
Tambin debemos ser conscientes que un trabajador o un alumno podran tener varias
cuentas pero solo nos vamos a centrar en la que usamos en la academia.
--------------------------------------------------------
-- File created - Sunday-November-22-2015
--------------------------------------------------------
REM INSERTING into PROYECTO.ALUMNO
SET DEFINE OFF;
Insert into PROYECTO.ALUMNO (IDALU,NOMBRE,FECNACIMIENTO,TUTOR,SEXO)
values ('A01','Mario Carrasco',to_date('05-NOV-97','DD-MON-
RR'),'Javier','M');
Insert into PROYECTO.ALUMNO (IDALU,NOMBRE,FECNACIMIENTO,TUTOR,SEXO)
values ('A02','Adela Rodrguez',to_date('04-JUL-00','DD-MON-
RR'),'Estefana','F');
Insert into PROYECTO.ALUMNO (IDALU,NOMBRE,FECNACIMIENTO,TUTOR,SEXO)
values ('A03','Alejandro Hinojosa',null,'Irene','M');
Insert into PROYECTO.ALUMNO (IDALU,NOMBRE,FECNACIMIENTO,TUTOR,SEXO)
values ('A04','Carmen Garca',null,'Blanca','F');
Insert into PROYECTO.ALUMNO (IDALU,NOMBRE,FECNACIMIENTO,TUTOR,SEXO)
values ('A05','Judit Romero',to_date('06-MAY-08','DD-MON-
RR'),'Manoli','F');