Professional Documents
Culture Documents
GSyC"
2"
Contenidos"
El modelo de datos Relacional"
Normalizacin"
GSyC"
3"
Modelos de datos"
Diseo lgico!
Tras el diseo conceptual utilizando ER realizamos ahora el diseo lgico"
Consiste en convertir la descripcin de alto nivel del diagrama ER en un modelo de
datos adecuado al SGBD que usemos"
GSyC"
5"
Alumnos(nif: string, nombre: string, email: string, edad: int, nota_media: float)
Nota_media!
123456789A
lag@gmail.com
18
7.8
443666789F
pgg@gmail.com
19
8.0
436375531H
jss@gmail.com
21
7.2
6"
Lenguajes de interrogacin
relacionales"
Interrogacin (query): Pregunta sobre los datos almacenados en una BD: "
Cul es el nombre del alumno cuyo NIF es 443666789F? "
Cuntos alumnos estn matriculados de las asignaturas de nombre IARO y SAT"
Cuntos alumnos tienen menos de un 5.0 en SAT? "
GSyC"
7"
SQL"
Cada SGBD define"
un Lenguaje de Definicin de Datos (DDL) para especificar el
Esquema Conceptual y los Esquemas Externos (vistas) de las BD."
un Lenguaje de Manipulacin de Datos (DML) para que los usuarios
de una BD puedan crear, modificar e interrogar la BD. El lenguaje de
interrogacin es, por lo tanto, parte del DML. "
SQL, Standarized Query Language, pese a su nombre, no es
simplemente un lenguaje de interrogacin, sino que incluye tanto un DDL
como un DML."
Est estandarizado pero cada SGBD (Oracle, PostgreSQL, SQLite,
MySQL) aade su propias extensiones."
GSyC"
8"
Alumnos
nif!
Nombre!
Email!
Edad!
Nota_media!
123456789A
lag@gmail.com
18
7.8
443666789F
pgg@gmail.com
19
8.0
436375531H
jss@gmail.com
21
7.2
nif!
asignatura!
Nota!
123456789A
ISI
5.8
123456789A
Circuitos
10.0
436375531H
Latn
10.0
Matriculados
GSyC"
9"
Destruccin y modificacin de
relaciones"
Destruccin de la relacin, su esquema y sus tuplas:"
DROP TABLE Alumnos;
GSyC"
10"
GSyC"
11"
Interrogacin SQL"
Alumnos
nif!
Nombre!
Email!
Edad!
Nota_media!
123456789A
lag@gmail.com
18
7.8
443666789F
pgg@gmail.com
19
8.0
jss@gmail.com
21
" 436375531H Jos Snchez Cid
"
Para encontrar todos los estudiantes de 18 aos:"
7.2
SELECT *
FROM Alumnos A
WHERE A.edad=18;
"
Para encontrar slo nombres e emails:"
SELECT A.nombre, A.email
FROM Alumnos A
WHERE A.edad=18;
"
"
GSyC"
12"
"
"
nif!
Nombre!
Email!
Edad!
Nota_media!
123456789A
lag@gmail.com
18
7.8
443666789F
pgg@gmail.com
19
8.0
436375531H
jss@gmail.com
21
7.2
nif!
Asignatura!
Nota!
123456789A
ISI
5.8
123456789A
Circuitos
10.0
Matriculados
10.0
" 436375531H Latn
Para encontrar todos los estudiantes con matrcula de honor:"
"
SELECT A.nombre, M.asignatura
SELECT A.nombre, M.asignatura FROM Alumnos
FROM
JOIN Matriculados M ON A.nif = M.nif AND
" Alumnos A, Matriculados M
WHERE A.nif = M.nif AND M.nota=10.0;
M.nota = 10.0;
"
A.Nombre!
M.Asignatura!
Circuitos
Latn
Resultado
GSyC"
13"
Restricciones de Integridad
Integrity Constraints (ICs)"
Restricciones de integridad: Condicin que debe cumplirse en cualquier
instancia de la BD"
Ej: restricciones de dominio: el campo X almacena nmeros enteros"
GSyC"
15"
Restricciones de dominio"
Dominio: El conjunto valores permitidos para cada columna (campo/
atributo) de una tabla. "
Cada valor para una columna debe estar entre el rango permitido en su
dominio al definirla. "
Al declarar el dominio de una columna puede darse un valor por defecto
para ella. "
Al declarar el dominio de una columna puede especificarse si se permite
un valor nulo para ella. "
Si se intenta aadir una fila que no cumple todas las restricciones de
dominio para los valores de todos sus campos, la insercin ser
rechazada. "
Con SQL hay dominios predefinidos y pueden definirse nuevos. "
GSyC"
16"
"
"
!
GSyC"
17"
GSyC"
18"
En Meteor, Rails, Django, se utiliza como clave primaria de todas las entidades
una clave surrogada en lugar de la clave natural obtenida del modelo ER. "
La clave surrogada es una columna adicional que se aade automticamente: el
campo _id en Meteor, Rails,"
Se garantiza que es nica y que no se reutiliza"
Pero debemos mantener como clave candidata las claves naturales
identificadas en el modelo ER, para garantizar las restricciones de integridad
identificadas en el diseo conceptual expresado en el diagrama ER"
En el ejemplo, nombre y fecha_nac por un lado, y nif por otro."
GSyC"
"
19"
20"
21"
En una misma tabla puede haber varias columnas con claves forneas de
tablas distintas. "
Un clave fornea puede referirse a la clave primaria de la propia tabla."
Ej: empleado supervisa empleado"
22"
"
GSyC"
23"
"
GSyC"
24"
GSyC"
25"
Conversin de un Modelo ER
a un Modelo de datos
Relacional"
GSyC"
27"
GSyC"
28"
29"
30"
31"
GSyC"
32"
33"
34"
35"
36"
Relaciones ES-UN"
Alternativa 1: "
Tanto el conjunto de entidades base como los conjuntos de entidades
derivados se trasladan a tablas diferentes."
Las tablas de las entidades derivadas incluyen como campos: "
sus atributos especficos"
los atributos clave de la entidad base son clave primaria y clave fornea en la derivada"
37"
38"
GSyC"
39"
fecha_nac
Empleados
coste
Pliza
f_nombre
edad
Familiares
GSyC"
40"
(dni VARCHAR(20),
pid INT,
did INT,
hasta DATE,
PRIMARY KEY (dni,
FOREIGN KEY (dni)
FOREIGN KEY (pid)
FOREIGN KEY (did)
pid, did),
REFERENCES Empleados,
REFERENCES Proyectos,
REFERENCES Departamentos);
Supervisa
hasta
"
comienzo
desde
ppresupuesto
pid
Proyectos
Depende
GSyC"
did
dnombre
dpresupuesto
Departamentos
41"
(dni VARCHAR(20),
pid INT,
did INT,
hasta DATE,
PRIMARY KEY (dni,
FOREIGN KEY (dni)
FOREIGN KEY (pid)
FOREIGN KEY (did)
pid, did),
REFERENCES Empleados,
REFERENCES Proyectos,
REFERENCES Departamentos);
Supervisa
hasta
"
comienzo
did
ppresupuesto
pid
Proyectos
Depende
GSyC"
dnombre
dpresupuesto
Departamentos
42"
Empleados
Comprador
Beneficiario
Plizas
GSyC"
GSyC"
poli_id
coste
43"
GSyC"
44"
dni
nombre
f_nombre
fecha_nac
edad
Familiares
Empleados
Comprador
Beneficiario
Plizas
GSyC"
poli_id
coste
45"
GSyC"
46"
Normalizacin"
Introduccin"
En Meteor, Rails, Django, se utiliza como clave primaria de todas las
entidades una clave surrogada en lugar de la clave natural obtenida del
modelo ER (tipicamente denominada _id) "
Se garantiza que es nica y que no se reutiliza"
Pero debemos mantener como clave candidata la clave natural
identificada en el modelo ER, para garantizar las restricciones de
integridad identificadas en el diseo conceptual expresado en el diagrama
ER"
Y debemos identificar otros conjuntos de claves que puedan ser claves
candidatas"
48"
Normalizacin"
Es un proceso mediante el que se reorganizan los
campos y las tablas de una base de datos relacional"
Introducido por Codd en el artculo original de 1969 "
49"
Normalizacin"
Ojo: tras realizar la normalizacin, aumenta el
nmero de tablas, por lo que empeora el tiempo de
ejecucin de las operaciones"
Se necesitan ms JOINs, entre tablas dispersas en el
disco"
GSyC"
50"
Jugadores!
_id!
Nombre!
Apellidos!
Telfono!
!
1!
Mara!
Paz Vega!
666666!
2!
Carlos!
Sez Sez!
777777!
!
999999!
!
3!
Ludovico!
Cuesta Aylln! 888888!
!
Problema:!
Las consultas que busquen por telfono son difciles
(bsqueda en un string con todos los tlfs. por ejemplo)"
Cambiar un telfono o borrarlo tambin es difcil"
GSyC"
51"
Apellidos!
Telfono!
Paz Vega!
666666!
Sez Sez!
777777!
999999!
Cuesta Aylln!
888888!
Telfono 2!
!
null!
999999"
"
null!
52"
Jugadores"
_id!
Nombre!
Apellidos!
Telfono!
1!
Mara!
Paz Vega!
666666!
2!
Carlos!
Sez Sez!
777777!
999999!
3!
Ludovico!
1FN
Jugadores
Telfonos
_id! Nombre!
Apellidos!
_id!
Telfono! Jugador_id!
1"
Mara"
Paz Vega"
1"
666666"
1"
2"
Carlos"
Sez Sez"
2"
777777!
2"
3"
Ludovico"
Cuesta Aylln"
3"
999999!
2"
4"
888888"
3"
GSyC"
53"
Apellidos!
Telfono!
Paz Vega!
666666!
Sez Sez!
777777!
999999!
Cuesta Aylln!
888888!
Apellidos!
Telfono!
1!
Mara!
Paz Vega!
666666!
2!
Carlos!
Sez Sez!
777777"
3!
Carlos!
Sez Sez!
999999"
4!
Ludovico!
Cuesta Aylln!
888888!
Aficiones"
_id!
Nombre!
Deporte!
Fecha Nacimiento!
1!
Golf!
1/1/1982!
2!
Tenis!
1/1/1982"
3"
Tiro olmpico"
3/11/1989"
4"
Beisbol"
12/2/1969"
5"
Golf"
12/2/1969"
6"
Paddle"
12/2/1969"
55"
Aficiones"
"
Aficiones
_id!
jugador_id!
_id!
Nombre!
Deporte!
Fecha Nacimiento!
1!
Golf!
1/1/1982!
2!
Tenis!
1/1/1982"
3"
Tiro olmpico"
3/11/1989"
4"
Beisbol"
12/2/1969"
5"
Golf"
12/2/1969"
6"
Paddle"
12/2/1969"
Deporte!
2FN
Jugadores
_id!
Nombre!
!
Fecha Nacimiento!
1!
1!
Golf!
2!
1!
Tenis!
1!
1/1/1982"
3"
2"
Tiro olmpico"
2"
3/11/1989"
4"
3"
Beisbol"
Camilo Gmez
Ruano"
5"
3"
Golf"
3"
12/2/1969"
6"
3"
Paddle"
GSyC"
56"
Torneos"
_id!
Torneo!
Fecha!
Ganador!
Fecha Nacimiento
Ganador!
1!
Froot Wars!
1/12/2013!
Gema"
12/1/1992"
2!
Alien Invasion!
12/12/2013!
locobiedma" 1/3/1993"
3"
Froot Wars"
6/1/2014"
Xevit"
21/5/1991"
4"
Clarkasonne"
7/12/2013"
Gema"
12/1/1992"
5"
Clarkasonne"
3/4/2014"
locobiedma" 1/3/1993"
"
Problema: Si cambia la fecha de nacimiento de un ganador hay
que modificar varias filas"
"
GSyC"
57"
Torneos:"
_id!
Torneo!
Fecha!
Ganador!
Fecha Nacimiento
Ganador!
1!
Froot Wars!
1/12/2013!
Gema"
12/1/1992"
2!
Alien Invasion!
12/12/2013!
locobiedma" 1/3/1993"
3"
Froot Wars"
6/1/2014"
Xevit"
21/5/1991"
4"
Clarkasonne"
7/12/2013"
Gema"
12/1/1992"
5"
Clarkasonne"
3/4/2014"
locobiedma" 1/3/1993"
Torneos
_id!
Torneo!
Fecha!
Jugador_id!
1!
Froot Wars!
1/12/2013!
1"
2!
Alien
Invasion!
12/12/2013!
2"
3"
Froot Wars"
6/1/2014"
3"
4"
Clarkasonne" 7/12/2013"
1"
5"
Clarkasonne" 3/4/2014"
2"
3FN
GSyC"
Jugadores
_id!
Jugador!
!
Fecha Nacimiento!
1!
Gema"
12/1/1992"
2"
locobiedma"
1/3/1993"
3"
Xevit"
21/5/1991"
58"
GSyC"
1FN"
2FN"
3FN"
59"
Referencias "
Database Management Systems, 3rd edition.
Raghu Ramakrishnan, Johannes Gehrke.
Ed. Mc Graw Hill, 2003. Captulos 1,2,3,5."
Learning SQL. Alan Beaulieu. Ed. OReilly.
2005."
Database Normalization, Wikipedia. http://
en.wikipedia.org/wiki/
Database_normalization"
GSyC"
60"