Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Como Hacer Un Modelo Relacional
Como Hacer Un Modelo Relacional
Informtica GRUPO A
Entidad: Igual que en el esquema ER. Tambin se les llama tuplas o filas de la relacin.
Atributo: Igual que en el esquema ER. Tambin se le llaman columnas de la relacin.
El dominio de los atributos tiene que ser simple: no se admiten atributos multivalorados ni
compuestos.
Esquema de una relacin: viene dado por el nombre de la relacin y una lista de atributos.
Es el tipo de entidad.
Conjunto de entidades: Relacin o tabla.
DNI
NombreyApellidos
Domicilio
Telfono
COU
01234567Z
91-12345678
SI
3.2
compositores
DNI
NombreyApe
Autor
canciones
ttulo
CDs
en
duracin
Nm.serie
intrprete
ttuloCD
Solucin:
compositores(DNI, NombreYApe)
canciones(titulo, duracion,NmSerie)
autor(DNI, titulo, duracin, NmSerie)
en(titulo, duracin, NmSerie) <- Se debe eliminar
CDs(Num.Serie, ttuloCD, intrprete)
Generalizaciones
Se tratan igual que en el caso de las entidades dbiles.
La relacin IsA no se transforma en relacin
DNI
Apellidos y Nombre
Domicilio
Telfono
personas
is a
COU
alumnos
profesores
E2
E2
E2
Dos superclaves: c1 y c2
b) Una a varias
E1
Superclave: c2
c) Varias a varias
E1
Superclave : c1 c2
Relaciones n-arias
Supongamos que la relacin proviene de un tipo de relacin R entre tipos de entidad E1, E2, ...,
Ek.
- Si todos participan con cardinalidad varios en R, entonces una superclave es la unin de las
claves de E1, E2, ..., Ek.
- Si algunos tipos de entidad participan con cardinalidad una en R, entonces uno de ellos
puede ser excluido de la superclave.
Obs.:
- Si los tipos de entidades E1, E2,...,Ek no intervienen en tipos de relacin adicionales y no
hay otros requerimientos, la Def.: anterior nos proporciona una clave del tipo de relacin.
Ej: BD secretara
Alumnos(DNI, Apellidos y Nombre, Domicilio, telfono, COU)
Asignaturas(Cdigo, ttulo, nm.crditos) Otra clave candidata: { ttulo }
Profesores(DNI, Apellidos y nombre, Domicilio, telfono)
Aulas(Edificio, nm.Edificio)
Matricula(DNI, Cdigo, Nota)
Supervisa(DNISupervisor,DNISupervisado)
Imparte(DNI, Codigo, Edificio,NumAula)
Ej: BD de canciones:
compositores(DNI, NombreYApe)
canciones(ttulo, duracin, NmSerie)
autor(DNI, ttulo, duracin, NmSerie)
CDs(Nm.Serie, ttuloCD, intrprete)
3.2.3
Cuestiones de diseo
Personas
Nacida
Pases
DNI
Esquema de la BD:
Personas(DNI, Apell.)
Pases(Nombre)
Nacida(DNI, Nombre)
Nuevo Esquema:
Personas(DNI,Apell, PaisNac)
Pases(Nombre)
Ej:
Esquema de BD:
personas(DNI, ApellidosyNombre, Domicilio, telfono).
alumnos(DNI, COU)
profesores(DNI)
Esquema modificado:
personas(DNI, ApellidosyNombre, Domicilio, telfono,AlumnOProfe, COU).
Obs.:
- Se admite la existencia de una valor nulo (NULL) en todo dominio de un atributo.
- Los atributos que forman parte de una clave no pueden tomar el valor nulo en ninguna
instancia vlida de la BD.
Se llama dominio de un atributo al rango de valores que puede tomar inicialmente (sin
considerar otras restricciones), valor que se conoce en programacin habitualmente como
atributo.
En MySQL:
- Numricos: bit (0,1), tinyint (-128,127), bool o Boolean (true=1, false=0), smallint (-32768 to
32767), mediumint (-8388608 to 8388607), int (-2147483648 to 2147483647), bigint (9223372036854775808 to 9223372036854775807), float, Decimal(m,d) (m el nmero total de
dgitos, d el nmero total de decimales),
Adems todos los tipos excepto bit y bool admiten la palabra clave unsigned como prefijo.
Ejemplo:
Create table personal(. , edad unsigned tinyint,.)
- Cadenas de caracteres: Char(n) (n el nmero de caracteres), Varchar(n) (n el nmero de
caracteres) y Text (cadena sin limite de caracteres)
Create table cuento(
nombreAutor varchar(20),
titulo varchar(50),
elCuento text);
La diferencia entre varchar y char es lo que ocupan en el almacenamiento fsico: char siempre lo
mismo, varchar dependiendo de la longitud concreta del valor almacenado. Se prefiere varchar
excepto si el tiempo de acceso es crtico en cuyo caso se elige char.
- Fechas y horas: Date, Time, DateTime, TimeStamp (tiempo desde el 1 de enero de 1970) y
YEAR (slo el ao).
- Otros tipos: ENUM('value1','value2',...), SET('value1','value2',...).
Adems otros SQL como ORACLE y PostgreSQL permiten la creacin de nuevos dominios
como en este ejemplo:
CREATE DOMAIN onoff AS VARCHAR CHECK VALUE IN ('on', 'off')
Sin embargo esto no es vlido en MySQL. Por el contrario los tipos MySQL enum y set no son
admitidos por la mayor parte de los sistemas basados en SQL.
3.3.3
- Default: Permite dar valores por defecto a alguna(s) columnas mediante la palabra clave
DEFAULT:
CREATE TABLE PolizaSeguros
(
DNI varchar(10),
NombreYApellidos varchar(255),
TipoPoliza varchar(20) DEFAULT 'Seguro Vida'
);
Se pueden usar funciones del sistema. Por ejemplo si getDate() devuelve la fecha actual:
CREATE TABLE PolizaSeguros
(
DNI varchar(10),
NombreYApellidos varchar(255),
TipoPoliza varchar(20)DEFAULT 'Seguro Vida',
Fecha DATE DEFAULT getDate()
);
- Not null: indica que los valores de una columna no pueden estar vacos
Ejemplo: create table persona (DNI varchar(10) not null, );
- Claves primarias:
Se crean aadiendo una restriccin Primary key(atrib1,,atribn), donde (atrib1,,atribn) son
los atributos que forman la clave primaria:
Ejemplo:
CREATE TABLE personal (
nombre varchar(20) not null,
apellidos VARCHAR(60) not null,
domicilio varchar(80),
PRIMARY KEY (nombre, apellidos)
);
Se requiere que todas las columnas que participan en la clave primaria estn declaradas not null.
La mayora de los sistemas fuerzan la restriccin not null automticamente sin exigir que se
escriba de forma explcita. Sin embargo se recomienda indicarlo explcitamente por claridad.
En caso de que la clave primaria est formada por una nica columna se admite una sintaxis
alternativa consistente en escribir las palabras Primary Key al final de la declaracin del atributo
que forma la clave.
Ejemplo:
CREATE TABLE personal (
DNI varchar(10) not null primary key,
apellidos VARCHAR(60) not null,
domicilio varchar(80)
);
MySQL:
ALTER TABLE localidades DROP INDEX
unaLocporCM
- Claves ajenas: obligan a que una o ms columnas de las tablas existan previamente en otra
tabla. Se usa sobre todo al pasar al diagrama relacional relaciones de un diagrama ER: las claves
prestadas por la relacin sern claves ajenas con respecto a la tabla correspondiente. Se
representan con la sintaxis
FOREIGN KEY (atr1,,atrn) REFERENCES t(atr1,,atm)
donde:
- (atr1,,atrn) son atributos de la tabla actual
- (atr1,,atrn) son atributos que forman la clave primaria de la tabla t, que ya existe.
- El dominio de los atributos (atr1,atr1),,(atrn,atrn) son compatibles.
Ejemplo:
Personas
R
Nacida
Pas
Se refleja en las tablas SQL como (nos inventamos los atributos, no vienen en el diagrama):
CREATE TABLE personas (
nombre varchar(10) not null,
apellidos varchar(100) not null,
direccion varchar(200),
edad int,
primary key(nombre,apellidos)
);
CREATE TABLE Paises(
Nombre varchar(50) not null primary key,
Poblacion int
);
CREATE TABLE Nacida(
nombrePersona varchar(10) not null,
apellidosPersona varchar(100) not null,
nombrePais varchar(50) not null,
fecha DATE,
primary key(nombrePersona,apellidosPersona),
foreign key(nombrePersona,apellidosPersona)
references personas(nombre,apellidos),
foreign key(nombrepais)
references paises(nombre)
);
Problema: ahora cada tupla/fila de Nacida (la llamaremos tupla hija) depende de una tupla en
personas y otra en pases. Son sus tuplas padre (o madre). Qu ocurrira si borrsemos una
tupla padre dejando su correspondiente tupla en Nacida? que se incumplira la restriccin! Por
el ellos SGBD no nos va a permitir dejar tuplas hurfanas: si queremos borrar una tupla en
Pais, por ejemplo, primero debemos borrar todas la tuplas hijas en Nacida. El esquema es:
-
Las mismas 3 opciones existen cambiando ON DELETE por ON UPDATE. Adems se pueden
combinar ambas posibilidades.
Ejemplo:
CREATE TABLE Nacida(
nombrePersona varchar(10) not null,
Atencin: estas posibilidades son muy potentes, pero deben usarse con cuidado y documentarse
adecuadamente.
Hay que tener en cuenta que la creacin de claves ajenas tambin afecta a la hora de borrar
tablas completas con DROP Table: se deben borrar primero las tablas que contienen referencias
externas:
Ejemplo:
Drop table nacida;
Drop table paises;
Drop table personas;
- check : Se aseguran de que los valores que se van a almacenar verifican cierta propiedad P.
Sintaxis: check(P), donde P es la propiedad. Se puede poner al lado de la columna o al final
(slo de esta ltima forma si la propiedad implica a ms de una columna).
Ejemplo:
Create table ventaAlcohol(
DNI varchar(10) not null primary key,
nombreyapellidos varchar(100),
edad int,
Check (edad>17)
);
3.3.4
-
Conclusiones
Las restricciones expresadas en los requerimientos verbales iniciales deben quedar
reflejadas en el esquema de base de datos final.
No todas las restricciones quedan recogidas en el diagrama ER, as que deben
apuntarse aparte y tenerse en cuenta en la generacin del esquema.
Un buen diseo de esquema de bases de datos, sin informacin redundante y con
restricciones de integridad debidamente fijadas nos asegura una BD coherente y fcil
de mantener.
Para las restricciones de integridad que no pueden asegurarse con los mecanismos
anteriores existen en algunos SGBD como Oracle an otros mecanismos ms
complejos, como los trigger, que veremos ms adelante.
10