08 BBDD Modelo de Datos Relacional v2

60
Bases de Datos: El modelo de datos Relacional Ingeniería de Sistemas de Información Grado en Ingeniería en Tecnologías de Telecomunicación GSyC

Transcript of 08 BBDD Modelo de Datos Relacional v2

  • Bases de Datos:

    El modelo de datos Relacional"

    Ingeniera de Sistemas de Informacin!

    Grado en Ingeniera en Tecnologas de Telecomunicacin"

    "GSyC"

    """

  • 2013 Pedro de las Heras Quirs, Departamento GSyC, URJC"Algunos derechos reservados. Este trabajo se

    distribuye bajo la licencia Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License"

    2"GSyC"

  • Contenidos" El modelo de datos Relacional" Normalizacin"

    3"GSyC"

  • El modelo de datos Relacional"

  • 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" Modelo de Datos Relacional: Modelo de datos que utiliza tablas, claves

    primarias y claves forneas/Foreign Keys (FK) para modelar los datos" Otros modelos de datos: "

    Modelo de Datos Jerrquico" Modelo de Datos en Red" Modelo de Datos Orientado a Objetos " Modelo de Datos Objeto-Relacional " Modelo de Datos basado en documentos (ej. mongoDB)"

    5"GSyC"

  • Modelo Relacional: definiciones" 1969: Edgar F. Codd" Una BD relacional es un conjunto de relaciones! Relacin: formada por 2 partes"

    Instancia: una tabla, con filas (o tuplas) y columnas" N de filas: cardinalidad, N de columnas: grado" Todas las filas son distintas"

    Esquema: nombre de la relacin, nombre y tipo de cada columna (o campo, o atributo), restricciones ""

    Ejemplo de esquema: " Alumnos(nif: string, nombre: string, email: string, edad: int, nota_media: float)

    Ejemplo de una instancia (tabla) de la relacin Alumnos: ""

    6"GSyC"

    nif! Nombre! Email! Edad! Nota_media!123456789A Luis Gmez Sanz [email protected] 18 7.8

    443666789F Pedro A. lvarez Gil [email protected] 19 8.0

    436375531H Jos Snchez Cid [email protected] 21 7.2

    Cardinalidad: 3, Grado: 5, todas las filas distintas.

  • 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? "

    Cada SGBD define un lenguaje de interrogacin con el que pueden formularse las interrogaciones a sus BD."

    El modelo relacional tiene entre sus carctetsticas que permite definir lenguajes de interrogacin muy potentes para las BD relacionales."

    Las interrogaciones es escriben de modo intuitivo" Un SGBD trata de que la evaluacin de las interrogaciones se haga de la forma

    ms eficiente posible. " La semntica de las interrogaciones est bien definida en trminos de un

    lgebra relacional, lo que permite al optimizador reordenar operaciones " La eficiencia tambin depende de cmo se han almacenado los datos y de

    cmo se han indexado (qu ndices se han definido) "

    7"GSyC"

  • 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."

    8"GSyC"

  • Creacin de relaciones en SQL"

    9"GSyC"

    nif! Nombre! Email! Edad! Nota_media!123456789A Luis Gmez Sanz [email protected] 18 7.8

    443666789F Pedro A. lvarez Gil [email protected] 19 8.0

    436375531H Jos Snchez Cid [email protected] 21 7.2

    nif! asignatura! Nota!123456789A ISI 5.8

    123456789A Circuitos 10.0

    436375531H Latn 10.0

    Alumnos

    Matriculados

    CREATE TABLE Alumnos

    (nif CHAR(10),

    nombre CHAR (30),

    email CHAR (30),

    edad INT,

    nota_media FLOAT

    ); "

    CREATE TABLE Matriculados

    (nif CHAR(10),

    asignatura CHAR (30),

    nota FLOAT

    ); ""

  • Destruccin y modificacin de relaciones"

    Destruccin de la relacin, su esquema y sus tuplas:" DROP TABLE Alumnos;

    Aadir columna al esquema:" ALTER TABLE Alumnos

    ADD COLUMN aoIngreso INT;

    Se aade campo a las tuplas existentes, con valor NULL para las filas existentes"

    10"GSyC"

  • Aadir, Eliminar y Modificar tuplas"

    Aadir tupla en una tabla:" INSERT INTO Alumnos(nif, nombre, email, edad, nota_media) VALUES ('1234234N', 'Pepe Leches', '[email protected]', 22, 2.3); " Borrar tuplas de una tabla" DELETE FROM Alumnos WHERE nombre = 'Pepe Leches';" Modificar una tupla:" UPDATE Alumnos

    SET nombre='Jose Leches'

    WHERE nif= '1234234N';

    11"GSyC"

  • Interrogacin SQL"

    "" Para encontrar todos los estudiantes de 18 aos:"

    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;

    "" 12"GSyC"

    nif! Nombre! Email! Edad! Nota_media!123456789A Luis Gmez Sanz [email protected] 18 7.8

    443666789F Pedro A. lvarez Gil [email protected] 19 8.0

    436375531H Jos Snchez Cid [email protected] 21 7.2

    Alumnos

  • JOIN: Interrogacin SQL en varias tablas"

    ""

    " Para encontrar todos los estudiantes con matrcula de honor:""""

    13"GSyC"

    nif! Nombre! Email! Edad! Nota_media!123456789A Luis Gmez Sanz [email protected] 18 7.8

    443666789F Pedro A. lvarez Gil [email protected] 19 8.0

    436375531H Jos Snchez Cid [email protected] 21 7.2

    nif! Asignatura! Nota!123456789A ISI 5.8

    123456789A Circuitos 10.0

    436375531H Latn 10.0

    Alumnos

    Matriculados

    A.Nombre! M.Asignatura!Luis Gmez Sanz Circuitos

    Jos Snchez Cid Latn

    Resultado

    SELECT A.nombre, M.asignatura FROM Alumnos A JOIN Matriculados M ON A.nif = M.nif AND M.nota = 10.0;

    SELECT A.nombre, M.asignatura FROM Alumnos A, Matriculados M WHERE A.nif = M.nif AND M.nota=10.0;

  • El modelo de datos relacional: Restricciones de Integridad

    "

  • 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" Las restricciones se expresan cuando se define el esquema! Las restricciones se comprueban cuando se modifican las relaciones! Una instancia legal de una relacin es la que satisface todas las

    restricciones de integridad" Los DBMS no deben permitir instancias ilegales"

    Si el DBMS comprueba las restricciones de integridad, los datos almacenados son ms fieles a su significado en el mundo real"

    Y adems se evitan errores en la introduccin de datos" Tipos de Restricciones de Integridad: "

    Restricciones de Dominio " Restricciones de Clave Primaria " Restricciones de Clave Fornea " Restricciones de Tabla" Restricciones Complejas (Aserciones). "

    15"GSyC"

  • 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. "

    16"GSyC"

  • Restricciones de dominio: Ejemplo" En SQL: CREATE TABLE Estudiantes(nif VARCHAR(20) NOT NULL,

    nombre VARCHAR(30) NOT NULL, login VARCHAR(20), edad INT NOT NULL, nota_media FLOAT DEFAULT '0.0' NOT NULL); "

    "NOT NULL: Indica que este campo no puede tener valor nulo. "DEFAULT: Indica el valor por defecto para este campo."

    ""!

    17"GSyC"

  • Restricciones de Clave Primaria y candidatas"

    Clave o Clave candidata: Conjunto de campos de una tabla que identifica unvocamente una tupla/fila, cumplindose adems que ningn subconjunto de ellos lo hace. "

    Superclave: Conjunto de campos que identifica unvocamente una fila, siendo que un subconjunto de ellos tambin lo hace. "

    Clave primaria: Una de las claves candidatas ser la clave primaria, elegida al definir el esquema"

    La restriccin de clave primaria en una tabla implica que no pueden aadirse dos filas con los mismos valores en la clave primaria. "

    Si se han definido otras claves candidatas, tampoco podrn aadirse dos filas con los mismos valores en todos los campos de una clave candidata. "

    18"GSyC"

  • Restricciones de Clave Primaria y candidatas. Ejemplo"

    CREATE TABLE Estudiantes(nif VARCHAR(20), nombre VARCHAR(30), login VARCHAR(20), fecha_nac DATE, nota_media FLOAT, UNIQUE(nombre, fecha_nac), PRIMARY KEY(nif)); UNIQUE define una clave candidata, si la hubiera. " PRIMARY KEY define la clave primaria."

    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."

    "

    19"GSyC"

  • Restricciones de Clave Primaria y Candidatas: Precauciones"

    Cuidado con cmo elegimos las claves, candidatas y primarias:"

    1. As, slo guardamos una nota para cada pareja de asignatura y alumno: CREATE TABLE Matriculados (nif CHAR(10), asignatura CHAR (30), nota FLOAT, PRIMARY KEY (nif, asignatura));"

    2. CREATE TABLE Matriculados (nif CHAR(10), asignatura CHAR (30), nota FLOAT, PRIMARY KEY (nif), UNIQUE (asignatura, nota));

    "En cuntas asignaturas puede estar matriculado un alumno? "cuntas notas puede tener para cada asignatura?, cuntos "alumnos pueden sacar un 7.0 en cada asignatura?"

    "

    "

    20"GSyC"

  • Restricciones de Clave Primaria y Candidatas: Precauciones"

    Cuidado con cmo elegimos las claves, candidatas y primarias:"

    1. As, slo guardamos una nota para cada pareja de asignatura y alumno: CREATE TABLE Matriculados (nif CHAR(10), asignatura CHAR (30), nota FLOAT, PRIMARY KEY (nif, asignatura));"

    2. CREATE TABLE Matriculados (nif CHAR(10), asignatura CHAR (30), nota FLOAT, PRIMARY KEY (nif), UNIQUE (asignatura, nota));

    "As, cada alumno slo puede estar matriculado en una asignatura, y "recibir slo una nota para esa asignatura, y en cada asignatura no "puede haber un alumno con la misma nota. Seguro que queremos "eso? J"

    "

    "

    21"GSyC"

  • Restricciones de clave fornea Integridad referencial"

    La clave fornea se utiliza en el modelo relacional para implementar las relaciones del modelo ER"

    Clave Fornea: Conjunto de campos de una tabla que son clave primaria de otra tabla"

    se usan para referirse a una fila de esa otra tabla, como un puntero lgico " 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" Si se fuerzan todas las restricciones de clave fornea se consigue la

    Integridad referencial: no hay referencias apuntando a tuplas de otras tablas que no existen"

    "

    22"GSyC"

  • Restricciones de clave fornea: implicaciones en operaciones SQL" Cmo forzamos las restricciones de integridad de las FK para que no existan en

    Matriculados claves forneas que no correspondan a alumnos de la tabla Alumnos?"

    Insercin: Se rechaza la insercin de un fila en la que el valor de los campos de las claves forneas no aparece en ninguna fila de la tabla referenciada."

    Borrado: Cuando se borra una fila de una tabla referenciada en otra mediante clave fornea se puede optar entre: "

    1. Rechazar el borrado de esa fila si en la otra tabla alguna fila referencia a la que se quiere borrar. "2. Borrar tambin todas las filas de otra tabla que referenciaban a la fila borrada (a travs de su clave

    fornea). "3. Cambiar el valor de la clave fornea de las filas afectadas a un valor por defecto (si est

    establecido al definir el campo en la tabla original). "4. Cambiar el valor de la clave fornea de las filas afectadas al valor nulo (si est permitido al definir el

    campo en la tabla original). " Actualizacin: Cuando se cambia la clave primaria de una tabla referenciada en

    otra mediante clave fornea, es un caso anlogo al del borrado, con las mismas opciones "

    "23"GSyC"

  • Restricciones de clave fornea: ejemplo SQL"

    CREATE TABLE Matriculados (nif CHAR(10), asignatura CHAR (30), nota FLOAT, PRIMARY KEY (nif, asignatura)

    FOREIGN KEY (nif) REFERENCES Alumnos

    ON DELETE CASCADE);

    Significa: cuando se borre en la tabla alumnos una tupla se deben borrar en Matriculados las tuplas que pertenezcan a aquella"

    CREATE TABLE Matriculados (nif CHAR(10), asignatura

    CHAR (30), nota FLOAT, PRIMARY KEY (nif, asignatura)

    FOREIGN KEY (nif) REFERENCES Alumnos

    ON DELETE CASCADE

    ON UPDATE NO ACTION);

    ON DELETE especifica el comportamiento al borrar una entrada de la tabla referenciada, y ON UPDATE al actualizar la clave primaria en una entrada de esa tabla. " NO ACTION especifica rechazar el cambio (es el valor por defecto)." CASCADE especifica borrar o actualizar las entradas afectadas. " SET DEFAULT especifica poner el valor por defecto en la clave fornea de las entradas afectadas. " SET NULL especifica poner el valor nulo en la clave fornea de las entradas afectadas. "

    " 24"GSyC"

  • Modelo Relacional: Resumen"

    25"

    Representacin de los datos en tablas/relaciones" Simple, intuitivo, el ms usado " Las restricciones de integridad las puede especificar el

    administrador de la BD o el programador de la aplicacin, basndose en la semntica de la aplicacin"

    El DBMS comprueba si hay violaciones" Restricciones de clave primaria y de clave fornea" Restricciones de dominio"

    Hay lenguajes de interrogacin potentes como SQL" Hay reglas para traducir del modelo ER al modelo

    relacional"

    GSyC"

  • Conversin de un Modelo ER a un Modelo de datos

    Relacional"

  • Conjuntos de Entidades como tablas"

    Cada atributo del conjunto de entidades se convierte en un campo de la tabla. "

    Los atributos clave se convierten en la clave primaria de la tabla. "

    27"GSyC"

  • Conjuntos de Entidades como tablas: Ejemplo"

    CREATE TABLE Empleados (dni VARCHAR(10), nombre VARCHAR(30), fecha_nac DATE, PRIMARY KEY (dni));

    28"GSyC"

  • Los atributos de la tabla que representa al conjunto de relaciones incluyen: " los atributos descriptivos asociados al conjunto de

    relaciones " los atributos clave de cada conjunto de entidades,

    definidos como claves forneas " Los atributos clave de cada conjunto de entidades

    pasan a ser la clave primaria de la tabla" Recuerda que en Meteor, RoR se utiliza una clave

    primaria surrogada, distinta de la clave natural identificada por el modelo ER"

    La clave natural pasa a ser candidata"

    Conjuntos de Relaciones sin restricciones como tablas"

    29"GSyC"

  • Conjuntos de Relaciones sin restricciones como tablas: ejemplo"

    CREATE TABLE Trabaja_En2 ( dni VARCHAR(20), dep_id INT, direccion VARCHAR(30), fecha_ingreso DATE, PRIMARY KEY (dni, dep_id, direccion), FOREIGN KEY (dni) REFERENCES Empleados, FOREIGN KEY (dep_id) REFERENCES Departamentos, FOREIGN KEY (direccion) REFERENCES Sedes ); 30"GSyC"

  • Conjuntos de Relaciones con restricciones de clave"

    Opcin 1: Convertirla en una tabla como en el caso anterior, con la modificacin siguiente: " los atributos clave de un conjunto de entidades de la que salga una

    flecha hacia el conjunto de relaciones se convierten (ellos solos) en una clave candidata para la tabla"

    todas las claves de las entidades participantes en la relacin se convierten en claves forneas de la tabla de la relacin "

    Opcin 2 (preferible): Incluir la informacin de la relacin en la tabla del conjunto entidad del que sale la flecha 1-a-muchos: " incluir como claves forneas los atributos clave de las otras

    entidades relacionadas" incluir los atributos descriptivos "

    31"GSyC"

  • Conjuntos de Relaciones con restricciones de clave"

    Ventajas de la opcin 2: " Una tabla menos, menor complejidad " Las interrogaciones sobre ese conjunto de relaciones se harn

    sobre una sola tabla" Al no usar JOIN mejora el rendimiento pues la informacin est contigua en el

    disco, no en dos tablas"

    Inconveniente de la opcin 2: " Si la participacin del conjunto de entidades en el conjunto de

    relaciones es parcial, se desperdicia espacio en la BD (los campos aadidos tendrn valor nulo). "

    32"GSyC"

  • Conjuntos de Relaciones con restricciones de clave: Ejemplo"

    Opcin 1!

    CREATE TABLE Dirige ( dni VARCHAR(20), dep_id INT, fecha_comienzo DATE, PRIMARY KEY (dep_id), FOREIGN KEY (dni) REFERENCES Empleados, FOREIGN KEY (dep_id) REFERENCES Departamentos );

    33"GSyC"

  • Conjuntos de Relaciones con restricciones de clave: Ejemplo"

    Opcin 2!

    CREATE TABLE Departamento_Dirigido ( dep_id INT, dep_nombre VARCHAR(20), presupuesto FLOAT(20,2), dni VARCHAR(20), fecha_comienzo DATE, PRIMARY KEY (dep_id), FOREIGN KEY (dni) REFERENCES Empleados );

    34"GSyC"

  • Conjuntos de Relaciones con restricciones de participacin"

    En algunos casos una restriccin de participacin total puede representarse con restricciones NOT NULL"

    Ejemplo con la opcin 2 del caso anterior: "

    35"

    CREATE TABLE Depart_Dir ( dep_id INT, dep_nombre VARCHAR(20), presupuesto FLOAT(20,2), dni VARCHAR(20) NOT NULL, fecha_comienzo DATE, PRIMARY KEY (dep_id), FOREIGN KEY (dni) REFERENCES Empleados );

  • Conjuntos de Relaciones con restricciones de participacin"

    Pero algunas restricciones de participacin, como la del ejemplo, son ms difciles de trasladar al modelo relacional: necesitan restricciones de tabla en SQL o aserciones para poder expresarse: ejemplo, todo empleado trabaja en algn dpto y en todo dpto. trabaja al menos un trabajador"

    En la aplicacin tendremos que escribir el cdigo que garantice que cada vez que se aade un empleado o un dpto. se aade una entrada en la relacin "

    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"

    Para cada fila de la tabla de la entidad derivada, los campos heredados se guardan en una fila de la tabla de la entidad base (referenciada a travs de la clave fornea). "

    Si se borra la fila de la clase de la entidad base, debe borrarse la de la entidad derivada."

    Las queries de la entidad base son inmediatas. Las de la entidad derivada requieren join con la base para obtener algunos de los atributos"

    Alternativa 2: Slo se convierten en entidades las derivadas, que incluyen los campos de la base." Obliga a que cada empleado tenga que estar en alguna de las derivadas "

    37"GSyC"

  • Relaciones ES-UN: ejemplo"

    CREATE TABLE Emp_Tpo_Parcial (horas_trab INT, sueldo_hora FLOAT, dni VARCHAR(20), PRIMARY KEY (dni), FOREIGN KEY (dni) REFERENCES Empleados ON DELETE CASCADE);

    Alternativa 1

    CREATE TABLE Emp_Tpo_Parcial (nombre VARCHAR(20), fecha_nac DATE, horas_trab INT, sueldo_hora FLOAT, dni VARCHAR(20), PRIMARY KEY (dni) );

    Alternativa 2

    38"GSyC"

  • Conjuntos de entidades dbiles"

    El conjunto de entidades dbil y el conjunto de relaciones se convierten a una sola tabla "

    Cuando el dueo de la entidad de la que depende la entidad dbil se borre, todas las entidades dbiles que posee deben borrarse"

    39"GSyC"

  • Conjuntos de entidades dbiles: ejemplo"

    fecha_nac

    nombre

    edad f_nombre

    Familiares Empleados

    dni

    Pliza

    coste

    CREATE TABLE Fam_Poliza (f_nombre VARCHAR(20), edad INT, coste FLOAT, dni VARCHAR(10) NOT NULL, PRIMARY KEY (f_nombre, dni), FOREIGN KEY (dni) REFERENCES Empleados ON DELETE CASCADE);

    40"GSyC"

  • Agregaciones: ejemplo 1"

    CREATE TABLE Supervisa (dni VARCHAR(20), pid INT,

    did INT,

    hasta DATE,

    PRIMARY KEY (dni, pid, did),

    FOREIGN KEY (dni) REFERENCES Empleados,

    FOREIGN KEY (pid) REFERENCES Proyectos,

    FOREIGN KEY (did) REFERENCES Departamentos);

    "

    ppresupuesto

    comienzo dpresupuesto did

    Departamentos Proyectos

    pid

    Depende

    desde dnombre

    hasta Supervisa

    Ejemplo 1:" Una tabla para Supervisa, con los atributos clave de

    Empleados y Depende, y el descriptivo de Supervisa Las dems entidades y la relacin Depende, se

    convierten normalmente"

    41"GSyC"

  • Agregaciones: ejemplo 2"

    CREATE TABLE Supervisa (dni VARCHAR(20), pid INT,

    did INT,

    hasta DATE,

    PRIMARY KEY (dni, pid, did),

    FOREIGN KEY (dni) REFERENCES Empleados,

    FOREIGN KEY (pid) REFERENCES Proyectos,

    FOREIGN KEY (did) REFERENCES Departamentos);

    "

    ppresupuesto

    comienzo dpresupuesto did

    Departamentos Proyectos

    pid

    Depende

    dnombre

    hasta Supervisa

    Ejemplo 2: " Si Depende no tuviese atributo descriptivo y su participacin en

    Supervisa fuese total, podemos eliminar la tabla de Depende, pues toda instancia de Depende se puede obtener en las columnas pid y did de Supervisa

    42"GSyC"

  • Ejemplo adicional 1"

    GSyC"

    Beneficiario

    edad f_nombre

    Familiares

    poli_id coste

    Plizas

    nombre

    Empleados

    dni fecha_nac

    Comprador

    Una tabla para Empleados Las restricciones de clave nos permiten combinar Comprador con Plizas, y Beneficiario con Familiares

    Las restricciones de participacin nos hacen usar NOT NULL"

    43"GSyC"

  • Ejemplo adicional 1"CREATE TABLE Plizas (poli_id INT, coste FLOAT,

    dni VARCHAR(10) NOT NULL,

    PRIMARY KEY (poli_id),

    FOREIGN KEY (dni) REFERENCES Empleados

    ON DELETE CASCADE);

    CREATE TABLE Familiares (f_nombre VARCHAR(20),

    edad INT,

    poli_id INT NOT NULL,

    PRIMARY KEY (f_nombre, poli_id)

    FOREIGN KEY (poli_id) REFERENCES Plizas

    ON DELETE CASCADE);

    "

    44"GSyC"

  • Ejemplo adicional 2" Supongamos en este otro ejemplo que Pliza es una entidad dbil " Una tabla para Empleados Lo dems es parecido pero:"

    La clave primaria de Plizas pasa a ser poli_id, dni" Y por tanto la primaria y la fornea de Familiares tambin incorporan dni "

    Beneficiario

    edad f_nombre

    Familiares

    poli_id

    coste

    Plizas

    nombre

    Empleados

    dni fecha_nac

    Comprador

    45"GSyC"

  • Ejemplo adicional 2"CREATE TABLE Plizas (poli_id INT, coste FLOAT,

    dni VARCHAR(10) NOT NULL,

    PRIMARY KEY (poli_id, dni),

    FOREIGN KEY (dni) REFERENCES Empleados

    ON DELETE CASCADE);

    CREATE TABLE Familiares (f_nombre VARCHAR(20),

    edad INT,

    poli_id INT NOT NULL,

    dni VARCHAR(10) NOT NULL,

    PRIMARY KEY (f_nombre, poli_id, dni)

    FOREIGN KEY (poli_id, dni) REFERENCES Plizas

    ON DELETE CASCADE);

    "

    46"GSyC"

  • 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"

    Tras el paso del modelo ER al modelo de datos relacional se realiza el proceso de normalizacin !

    Hay que tener en cuenta todas las claves candidatas"

    48"GSyC"

  • 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 "

    Objetivo: minimizar la redundancia y las dependencias entre los campos " Haciendo que cada hecho de la realidad modelada slo

    aparezca en una tabla se minimiza la probabilidad de que las inserciones/actualizaciones/borrados puedan dejar la BD en un estado inconsistente"

    Consiste en dividir tablas con muchos campos en tablas con menos campos, aadiendo relaciones entre ellas"

    49"GSyC"

  • 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" Por ello se suele realizar una denormalizacin a

    posteriori, ad hoc, en funcin del patrn de inserciones/modificaciones/borrados observado"

    50"GSyC"

  • Primera Forma Normal (1FN)" El dominio de cada atributo contiene slo valores atmicos y el valor de

    cada atributo contiene un slo valor de ese dominio" Los campos no pueden ser conjuntos/arrays"

    Jugadores!!!!!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"

    51"GSyC"

    _id! Nombre! Apellidos! Telfono!1! Mara! Paz Vega! 666666!2! Carlos! Sez Sez! 777777!

    999999!3! Ludovico! Cuesta Aylln! 888888!

  • Primera Forma Normal (1FN)" Esto NO es una solucin razonable"Jugadores!!!!!Jugadores!!!!Problema:" Y si hay 3 telfonos? Cambiar el esquema (ALTER) no es barato" Malgastamos disco en los que slo tienen 1 telfono"

    52"GSyC"

    _id! Nombre! Apellidos!

    Telfono1! Telfono 2!!

    1! Mara! Paz Vega!

    666666! null!

    2! Carlos! Sez Sez!

    777777" 999999""

    4! Ludovico! Cuesta Aylln!

    888888! null!

    _id! Nombre! Apellidos! Telfono!

    1! Mara! Paz Vega! 666666!

    2! Carlos! Sez Sez! 777777!999999!

    3! Ludovico! Cuesta Aylln! 888888!

  • Primera Forma Normal (1FN)" Solucin 1: usamos 2 tablas"Jugadores"

    53"GSyC"

    _id! Nombre! Apellidos! Telfono!1! Mara! Paz Vega! 666666!2! Carlos! Sez Sez! 777777!

    999999!3! Ludovico! Cuesta Aylln! 888888!

    _id! Nombre! Apellidos!1" Mara" Paz Vega"2" Carlos" Sez Sez"3" Ludovico" Cuesta Aylln"

    _id! Telfono! Jugador_id!1" 666666" 1"2" 777777! 2"3" 999999! 2"4" 888888" 3"

    Jugadores Telfonos 1FN

  • Primera Forma Normal (1FN)" Solucin 2: peor que la anterior"Jugadores!!!!!Jugadores!

    ""

    Est en 1FN pero es peor que la solucin 1" {Nombre, Apellidos} NO es clave candidata (hay varias filas), lo que posiblemente

    no refleja los hechos de la realidad modelada" veremos despus que no est en 3FN: si cambian el nombre o los apellidos habra

    que modificar varias filas" 54"GSyC"

    _id! Nombre! Apellidos! Telfono!

    1! Mara! Paz Vega! 666666!

    2! Carlos! Sez Sez! 777777"

    3! Carlos! Sez Sez! 999999"

    4! Ludovico! Cuesta Aylln! 888888!

    _id! Nombre! Apellidos! Telfono!

    1! Mara! Paz Vega! 666666!

    2! Carlos! Sez Sez! 777777!999999!

    3! Ludovico! Cuesta Aylln! 888888!

    1FN

  • Segunda Forma Normal (2FN)" 1FN, y adems los atributos que no forman parte de una clave dependen

    de toda la clave (para todas las claves candidatas y primaria)"Aficiones"

    Problema: Si cambia la fecha de nacimiento hay que cambiar varias filas" Est en 1FN pero no en 2FN porque:"

    La razn por la que no est en 2FN es que Fecha Nacimiento slo depende de Nombre y debera depender de {Nombre, Deporte} para aparecer una sla vez"

    Nombre no es clave candidata (hay varias filas con mismo nombre). Deporte tampoco. La pareja {Nombre, Deporte} s es una clave candidata" 55"GSyC"

    _id! Nombre! Deporte! Fecha Nacimiento!

    1! Mara Saz Fiz! Golf! 1/1/1982!2! Mara Saz Fiz! Tenis! 1/1/1982"3" Camilo Gmez Ruano" Tiro olmpico" 3/11/1989"4" Jaime Sol Luz" Beisbol" 12/2/1969"5" Jaime Sol Luz" Golf" 12/2/1969"6" Jaime Sol Luz" Paddle" 12/2/1969"

  • Segunda Forma Normal (2FN)" Solucin"Aficiones"

    "

    56"GSyC"

    _id! Nombre! Deporte! Fecha Nacimiento!

    1! Mara Saz Fiz! Golf! 1/1/1982!2! Mara Saz Fiz! Tenis! 1/1/1982"3" Camilo Gmez Ruano" Tiro olmpico" 3/11/1989"4" Jaime Sol Luz" Beisbol" 12/2/1969"5" Jaime Sol Luz" Golf" 12/2/1969"6" Jaime Sol Luz" Paddle" 12/2/1969"

    _id! jugador_id! Deporte!

    1! 1! Golf!2! 1! Tenis!3" 2" Tiro olmpico"4" 3" Beisbol"5" 3" Golf"6" 3" Paddle"

    _id! Nombre!!

    Fecha Nacimiento!

    1! Mara Saz Fiz" 1/1/1982"2" Camilo Gmez

    Ruano"3/11/1989"

    3" Jaime Sol Luz" 12/2/1969"

    Jugadores Aficiones

    2FN

  • Tercera Forma Normal (3FN)" 2FN, y adems los atributos que no forman parte de una clave slo

    dependen de la clave (para todas las claves candidatas y primaria)"Torneos"

    "Problema: Si cambia la fecha de nacimiento de un ganador hay que modificar varias filas" Est en 2FN pero no en 3FN porque:"

    Fecha Nacimiento Ganador depende de Ganador, que no es un atributo que forme parte de ninguna clave candidata ni de la primaria"

    {Torneo, Fecha} es clave candidata pero ni Torneo ni Fecha por separado lo son"

    ""

    57"GSyC"

    _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"

  • Tercera Forma Normal (3FN)" Solucin"Torneos:"

    58"GSyC"

    _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"

    _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"

    _id! Jugador!!

    Fecha Nacimiento!

    1! Gema" 12/1/1992"2" locobiedma" 1/3/1993"3" Xevit" 21/5/1991"

    Torneos Jugadores 3FN

  • La verdad, toda la verdad, y nada ms que la verdad

    sobre la Normalizacin"

    Todo atributo no clave"depende de la clave, "de toda la clave, "y nada ms que de la clave"

    59"GSyC"

    1FN" 2FN" 3FN"

  • 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"

    60"GSyC"