Capítulo 2: Modelo relacional (Parte 2) Dr. Edwin E. González Carril SICI-4015: Archivo y base de datos agosto 2017
Objetivos 1. Definir el concepto normalización 2. Identificar los objetivos de normalizar las bases de datos 3. Demostrar los diferentes niveles de normalización 4. Aplicar los primeros tres niveles de normalización a una base de datos
Normalización Normalización: proceso de simplificar el archivo de los datos. Son una serie de reglas que sirven para ayudar a los diseñadores de bases de datos a desarrollar esquemas que minimice los problemas de lógica. IMPORTANTE: En la normalización se simplifica pero no se puede perder información
Por qué normalizar las bases de datos? 1. Aprovechar el espacio 2. Eliminar redundancia 3. Eliminar errores lógicos 4. Ordenar los datos de una forma lógica
Principios de la Normalización Las relaciones normalizadas deben cumplir con lo siguiente: 1. Cada determinante debe ser una clave candidata. 2. Cualquier relación que no está bien formada debe dividirse en dos o más relaciones bien formadas.
Problemas de modificación Las tablas que no estén normalizadas experimentarán problemas conocidos como problemas de modificación, tales como: Problemas de inserción Dificultades para insertar datos en una relación Problemas de modificación Dificultades para modificar datos en una relación Problemas de eliminación Dificultades para eliminar datos de una relación
Repaso de conceptos Dependencia funcional: es la relación que describe cómo se puede usar el valor de un atributo para encontrar el valor de otro atributo. Ejemplo: si conozco el número de estudiante, puedo conocer su nombre y apellido. Determinante (llave candidata) : es el atributo (campo) que se puede utilizar para encontrar el valor de otro atributo en la relación El lado derecho de una dependencia funcional Ejemplo: DormName DormCost UPC producto
Qué es la dependencia funcional y transitoria (indirecta)? Dependencia Funcional A=NumEstudiante Dependencia transitoria (indirecta) A=CodigoCurso B=Nombre B=NombreCurso C=Apellido1 C=NumEstudiante
Niveles de Forma Normal Forma normal Definida por Primera Forma Normal (1NF) Existen dos versiones, la de E. F. Codd de 1970 y la de C. J. Date de 2003. Segunda Forma Normal (2NF) E. F. Codd en 1971. Tercera Forma Normal (3FN) E. F. Codd en 1971. Forma Normal de Boyce-Codd Raymond F. Boyce y E. F. Codd (BCNF) en 1974. Cuarta Forma Normal (4NF) Ronald Fagin en 1977. Quinta Forma Normal (5NF) Ronald Fagin en 1979. Forma Normal de Dominio/Clave Ronald Fagin en 1981. (DKNF) Sexta Forma Normal (6NF) C. J. Date, Hugh Darwen y Nikos Lorentzos en 2002.
Primera forma normal (1FN) Todos los atributos tienen que tener valores simples. Ej: apellido1, apellido2, nombre, inicial No debe haber grupos de datos repetidos en las columnas. Ejemplo: una tabla de ordenes de clientes donde la información del cliente se repite en la tabla por cada artículo que compra. Solución: 1. Se dividen los datos en nuevos campos (Ej: la dirección postal). 2. Se dividen los campos en tablas con sus llaves PK y FK.
Ejemplo de BD sin normalizar NumEstudiante Nombre Apellido Email NombreCurso CodigoCurso Programa 844121234 Andrea Ocasio andrea.oca sio Base de datos, Programación Aplicada, Compendio cultura occidental I y II SICI4015, SICI3028, HUMA3111 Sistemas de Información 844112525 José Pérez jose.perez Base de datos SICI4015 Humanidades
Paso 1: Aplicación 1FN NumEstudiante Nombre Apellido Email NombreCurso CodigoCurso Programa 844121234 Andrea Ocasio andrea.oca sio 844121234 Andrea Ocasio andrea.oca sio 844121234 Andrea Ocasio andrea.oca sio Base de datos SICI4015 Sistemas de Información Programación Aplicada Compendio cultura occidental I y II SICI3028 HUMA3111 Sistemas de Información Sistemas de Información 844112525 José Pérez jose.perez Base de datos SICI4015 Humanidades
Paso 2: Aplicación 1FN NumEstudiante Nombre Apellido Email Programa 844121234 Andrea Ocasio andrea.ocasio Sistemas de Información 844112525 José Pérez jose.perez Humanidades NúmEstudiante NombreCurso CodigoCurso 844121234 Base de datos SICI4015 844121234 Programación Aplicada SICI3028 844121234 Compendio cultura occidental I y II HUMA3111 844112525 Base de datos SICI4015 Se separaron los datos del estudiante y de los cursos y se pasó la PK como FK en la nueva tabla.
Segunda forma normal (2FN) La relación debe estar en 1NF. Se deben eliminar cualquier campo (no llave) que no dependa de la PK. Ejemplo: NombreCurso no depende funcionalmente de NumEstudiante, sino de su llave CodigoCurso. Solución: 1. Los campos que no dependen funcionalmente del PK de la tabla, se colocarán en otra tabla relacionado con su FK.
Qué es la dependencia funcional y transitoria (parcial o indirecta)? Dependencia Funcional A=NumEstudiante Dependencia transitoria (parcial o indirecta) A=CodigoCurso B=Nombre B=NombreCurso C=Apellido1 C=NumEstudiante
Ejemplo de una tabla con 1FN para 2FN Num. Estudiante Nombre Apellido Email Programa 844121234 Andrea Ocasio andrea.ocasio Sistemas de Información 844112525 José Pérez jose.perez Humanidades No depende Depende Núm. Estudiante Curso Código del Curso 844121234 Base de datos SICI4015 844121234 Programación Aplicada SICI3028 844121234 Compendio cultura occidental I y II HUMA3111 844112525 Base de datos SICI4015 La solución en 2FN es separar cada tabla con los campos que le pertenece y crear una (Linking Table)
Aplicación de 2FN Número Estudiante Nombre Apellido Email Programa 844121234 Andrea Ocasio andrea.ocasio Sistemas de Información 844112525 José Pérez jose.perez Humanidades Núm. Estudiante Código del Curso 844121234 SICI4015 844121234 SICI3028 844121234 HUMA3111 844112525 SICI4015 NombreCurso Base de datos Programación Aplicada Compendio cultura occidental I y II Base de datos CodigoCurso SICI4015 SICI3028 HUMA3111 SICI4015 Los cursos con sus códigos se quedan solitos en una tabla independiente. Igualmente, los datos de los estudiantes se quedan solitos en otra tabla independiente. Se crea una tabla que una los estudiantes con curso con las FK.
Tercera forma normal (3FN) La relación debe estar en 2NF. Todos los atributos deben ser funcionalmente dependientes de la PK de esa tabla. Ejemplo: Nombre, Apellido dependen funcionalmente del NumEstudiante(PK) NombreCurso depende funcionalmente de CodigoCurso Se debe eliminar cualquier campo no llave que sea dependiente de otro campo no llave. Programa es dependiente de Nombre: ambos son campos no llave
Ejemplo de una tabla con 2FN para 3FN Número Estudiante Nombre Apellido Email Programa 844121234 Andrea Ocasio andrea.ocasio Sistemas de Información 844112525 José Pérez jose.perez Humanidades Núm. Estudiante Código del Curso 844121234 SICI4015 844121234 SICI3028 844121234 HUMA3111 844112525 SICI4015 Curso Base de datos Programación Aplicada Compendio cultura occidental I y II Base de datos Código del Curso SICI4015 SICI3028 HUMA3111 SICI4015 Se puede observar que la tabla de estudiantes tiene los campos que le pertenecen a él, pero tiene también programa. Este campo puede separarse para crear un lookup table, así se evita duplicidad de datos y se garantiza la integridad de los mismo.
Aplicación 3FN NumEstudiante Nombre Apellido Email IDPrograma 844121234 Andrea Ocasio andrea.ocasio SICI 844112525 José Perez jose.perez HUMA NumEstudiante CodigoCurso 844121234 SICI4015 844121234 SICI3028 844121234 HUMA3111 844112525 SICI4015 IDPrograma SICI HUMA Programa Sistemas de Información Humanidades NombreCurso Base de datos Programación Aplicada Compendio cultura occidental I y II Base de datos CodigoCurso SICI4015 SICI3028 HUMA3111 SICI4015 Se creó una nueva tabla que contendrá todos los programas con sus códigos. La tabla de Estudiantes entonces se relaciona con la tabla Programas
Resumen La normalización son reglas que se aplican a las tablas cuando se están diseñando, con el fin de optimizar la base de datos. Se normaliza para ahorrar espacio, proteger la integridad de los datos, evitar la redundancia y ordenar los datos. Existen 5 formas normales, pero las primeras tres son las más importante y las que más se utilizan en la práctica. 1FN: Incluye la eliminación de todos los grupos repetidos 2FN: Asegura que todos los campos (no llaves) sean dependientes de la PK 3FN: Elimina cualquier dependencia transitiva, o sea; campos no llaves que dependen de otros campos no llaves.
Ejercicio : Orden de Compras Num Orden Fecha NumCliente Nombre Pueblo NumArticulo DescArticulo Cantidad Precio 70001 02/23/16 500 Juan Aguadilla 456465 Disco Duro 3 90.00 70001 02/23/16 500 Juan Aguadilla 41658822 MS Office 6 160.00 70001 02/23/16 500 Juan Aguadilla 9132 Computadora 8 998.00 70002 02/25/16 501 María Arecibo 5794 Impresora 4 250.00 70003 02/27/16 502 Ana Cayey 41658822 MS Office 2 160.00 70003 02/27/16 503 Ana Cayey 3141 Antivirus 2 90.00
Ejercicio: Garden Glory
Ejercicio: James River Jewelry
Ejemplos: Relaciones sin normalizar Caso 1: StudentID, StudentName, DormName, DormCost Caso 2 EmployeeNumber, LastName, Email, Department, DeptPhone Caso 3 Attorney, ClientNumber, MeetingDate, Duration, ClientName
Ejemplo (Solución) 1. STU_DORM (StudentNumber, LastName, FirstName, DormName) DORM (DormName, DormCost) 2. EMPLOYEE (EmployeeNumber, LastName, Email, Department) DEPARTMENT(Department, DeptPhone) 3. MEETING (Attorney, ClientNumber, MeetingDate, Duration) CLIENT (ClientNumber, ClientName)