🗄️ Guía de Aula Invertida
vistas

Modelado Relacional y Normalización

Ya tienes un modelo ER sólido. Ahora toca completarlo con generalización/especialización, y llevarlo a un esquema de tablas sin redundancia ni anomalías: el proceso de normalización, paso a paso, desde 1FN hasta BCNF.

RC
Ing. Roy Carrasco
Facultad de Ingeniería de Sistemas · UAB

Bienvenido

Un modelo Entidad-Relación bien hecho no es el punto final: es el punto de partida. Esta guía cierra dos huecos que quedaron pendientes de la guía anterior y añade el proceso completo de normalización, la técnica que garantiza que un esquema relacional no tenga redundancia ni anomalías.

Objetivo del módulo

Al finalizar esta guía sabrás modelar jerarquías de generalización/especialización y convertirlas a tablas, identificar dependencias funcionales, reconocer anomalías de redundancia, y aplicar 1FN, 2FN, 3FN y BCNF sobre un esquema real.

📝 Actividades de este módulo

Encontrarás actividades cortas y autocorregibles —selección múltiple, verdadero/falso, emparejamiento, clasificación y completar espacios— repartidas a lo largo de la guía, y una sección de ejercicios de razonamiento donde se te da un escenario y debes predecir el resultado correcto antes de comprobarlo. Cada actividad te da retroalimentación inmediata.

🧬 Completa

Generalización/especialización: lo único que faltaba del modelo ER.

🔎 Razona

Dependencias funcionales: la base teórica de toda la normalización.

🧹 Ordena

1FN → 2FN → 3FN → BCNF, un esquema sin redundancia ni anomalías.

Generalización y especialización (ISA)

A veces una entidad tiene subtipos con atributos propios además de los que comparten con el tipo general. "Vehículo" puede especializarse en "Auto" y "Moto"; "Persona" puede especializarse en "Empleado" y "Cliente". Esta jerarquía se llama generalización/especialización, o relación ISA ("Auto ISA Vehículo": un Auto ES UN Vehículo).

TérminoSignificado
SuperclaseLa entidad general, con los atributos comunes a todos los subtipos.
SubclaseUn subtipo especializado, que hereda los atributos de la superclase y añade los suyos propios.
Participación totalToda instancia de la superclase debe pertenecer a alguna subclase.
Participación parcialPuede haber instancias de la superclase que no pertenezcan a ninguna subclase.
DisjuntaUna instancia solo puede pertenecer a una subclase a la vez (Auto o Moto, no ambas).
SolapadaUna instancia puede pertenecer a varias subclases al mismo tiempo (una Persona puede ser Empleado y Cliente a la vez).
Ejemplo

Vehículo (placa, marca, año) se especializa, de forma total y disjunta, en Auto (número de puertas) y Moto (cilindraje): todo vehículo registrado es un Auto o una Moto, y nunca ambos a la vez.

Clasificación

Clasifica cada situación según el tipo de participación/solapamiento que describe.

Todo Empleado de la empresa es Gerente o Técnico, nunca las dos cosas.
Una Persona puede ser Cliente, Proveedor, ambas cosas a la vez, o ninguna.

Cómo convertir una jerarquía ISA a tablas

Existen tres estrategias clásicas para representar una jerarquía ISA en tablas relacionales, con distintos compromisos.

EstrategiaCómo funciona
Tabla únicaUna sola tabla con todos los atributos de la superclase y todas las subclases, más una columna "tipo" para saber a qué subclase pertenece cada fila. Genera columnas que quedan en NULL para las filas que no aplican.
Tabla por subclaseUna tabla para la superclase (atributos comunes) y una tabla por cada subclase, cuya clave primaria es también clave foránea hacia la superclase. Es la más usada porque no desperdicia espacio y respeta bien la jerarquía.
Tabla por clase completaUna tabla independiente por cada subclase, repitiendo en cada una los atributos de la superclase (sin tabla aparte para la superclase). Solo funciona bien si la jerarquía es total.

Relaciona cada estrategia con su descripción.

Emparejamiento

Une cada estrategia de mapeo ISA con su descripción.

Dependencias funcionales

Una dependencia funcional X → Y significa: "el valor de X determina de forma única el valor de Y". Si dos filas tienen el mismo valor de X, necesariamente deben tener el mismo valor de Y. Toda la teoría de normalización se construye sobre este concepto.

NotaciónSe lee comoEjemplo
cedula → nombreLa cédula determina el nombre.Dos filas con la misma cédula deben tener el mismo nombre.
{pedido_id, producto_id} → cantidadLa combinación de pedido y producto determina la cantidad.Dependencia con un determinante compuesto.
Dependencia completa vs. parcial

Cuando la clave es compuesta (más de una columna), un atributo tiene dependencia completa si depende de toda la clave, y dependencia parcial si depende solo de una parte de ella. Por ejemplo, en DETALLE_PEDIDO(pedido_id, producto_id, producto_nombre, cantidad), cantidad depende de la clave completa {pedido_id, producto_id}, pero producto_nombre depende solo de producto_id: es una dependencia parcial.

Dependencia transitiva

Si X → Y y Y → Z, entonces X → Z, pero de forma indirecta (a través de Y). Por ejemplo, si empleado_id → depto_id y depto_id → depto_nombre, entonces depto_nombre depende de empleado_id de forma transitiva, no directa.

Completar

Dada la tabla EMPLEADO(empleado_id, nombre, depto_id, depto_nombre), donde depto_id → depto_nombre, clasifica cada dependencia.

1. La dependencia empleado_id → nombre es una dependencia .

2. La dependencia empleado_id → depto_nombre (a través de depto_id) es una dependencia .

Redundancia y anomalías

Un esquema mal normalizado repite información innecesariamente. Esa redundancia produce tres tipos clásicos de anomalías al modificar los datos.

pedido_idcliente_idcliente_nombrecliente_ciudad
1017Ana FloresCochabamba
1027Ana FloresCochabamba
1039Luis VegaSanta Cruz
AnomalíaQué ocurre
InserciónNo puedes registrar un cliente nuevo si todavía no tiene ningún pedido, porque cliente_nombre y cliente_ciudad solo existen "colgadas" de una fila de pedido.
EliminaciónSi borras el único pedido del cliente 9, pierdes también toda la información de "Luis Vega" sin querer.
ActualizaciónSi Ana Flores se muda de ciudad, hay que actualizar cliente_ciudad en todas sus filas; si olvidas una, los datos quedan inconsistentes.
Clasificación

Clasifica cada situación según el tipo de anomalía que describe.

Al borrar el pedido 103, se pierde por completo el registro de que existe el cliente "Luis Vega".
No se puede registrar a un cliente nuevo en el sistema hasta que haga su primer pedido.
Ana Flores cambia de ciudad y hay que corregir cliente_ciudad en varias filas repetidas.

Primera Forma Normal (1FN)

Una tabla está en 1FN si todos sus atributos son atómicos (no se pueden dividir más), no hay grupos repetitivos ni columnas multivaluadas, y cada fila puede identificarse de forma única.

cliente_idnombretelefonos
7Ana Flores591-70011122, 591-70033344
No cumple 1FN

La columna telefonos guarda varios valores en una sola celda. La solución es crear una tabla TELEFONO(cliente_id, numero) aparte, con una fila por número, relacionada por clave foránea.

Selección múltiple

Una tabla PRODUCTO tiene una columna "categorias" que guarda valores como "Electrónica, Hogar". ¿Qué regla de 1FN se está violando?

Segunda Forma Normal (2FN)

Una tabla está en 2FN si ya está en 1FN y, además, ningún atributo no clave depende solo de una parte de una clave primaria compuesta (no tiene dependencias parciales). Si la clave primaria es una sola columna, la tabla cumple 2FN automáticamente.

pedido_id (PK)producto_id (PK)producto_nombrecantidad
101P01Teclado2
101P02Mouse1
No cumple 2FN

producto_nombre depende solo de producto_id, no de la clave completa {pedido_id, producto_id}: es una dependencia parcial. Se corrige moviendo producto_nombre a una tabla PRODUCTO(producto_id, producto_nombre) aparte. cantidad sí depende de la clave completa, así que se queda en DETALLE_PEDIDO.

Completar

Sobre la tabla DETALLE_PEDIDO(pedido_id, producto_id, producto_nombre, cantidad):

1. producto_nombre depende de la clave primaria.

2. cantidad depende de la clave primaria.

Tercera Forma Normal (3FN)

Una tabla está en 3FN si ya está en 2FN y, además, ningún atributo no clave depende de otro atributo no clave (no tiene dependencias transitivas). Se resume con la regla mnemotécnica: cada atributo debe depender "de la clave, de toda la clave, y de nada más que la clave".

empleado_id (PK)nombredepto_iddepto_nombre
1Carlos RamírezD1Sistemas
2Ana LópezD1Sistemas
No cumple 3FN

depto_nombre no depende directamente de empleado_id: depende de depto_id, que a su vez depende de empleado_id. Es una dependencia transitiva. Se corrige moviendo depto_nombre a una tabla DEPARTAMENTO(depto_id, depto_nombre) aparte, dejando depto_id como clave foránea en EMPLEADO.

Selección múltiple

¿Por qué depto_nombre viola 3FN en la tabla EMPLEADO(empleado_id, nombre, depto_id, depto_nombre)?

Forma Normal de Boyce-Codd (BCNF)

BCNF es una versión más estricta que 3FN: para toda dependencia funcional X → Y de la tabla, X debe ser una superclave (una clave candidata, o contenerla). 3FN permite una excepción que BCNF no permite.

estudiantecursoprofesor
JuanBases de DatosRoy Carrasco
AnaBases de DatosRoy Carrasco
JuanRedesMarco Vidal
El caso especial

Regla de negocio: cada profesor dicta un único curso (profesor → curso), pero un curso puede tener varios profesores en paralelo, y un estudiante puede inscribirse con cualquiera de ellos. Las claves candidatas son {estudiante, curso} y {estudiante, profesor}. La dependencia profesor → curso es válida, pero profesor por sí solo no es una superclave: viola BCNF. Sin embargo, sí cumple 3FN, porque curso es parte de una clave candidata (un "atributo primo"), y 3FN permite esa excepción.

3FNBCNF
ExigeX → Y: X es superclave, o Y es parte de una clave candidata.X → Y: X es superclave, sin excepciones.
Este ejemplo✅ Cumple (curso es atributo primo).❌ No cumple (profesor no es superclave).
Verdadero o falso

Toda tabla que está en BCNF también está en 3FN.

Normalización paso a paso

Vas a normalizar una tabla real, de principio a fin. Punto de partida: una única tabla PEDIDO_RAW con datos de pedido, cliente y producto todos mezclados, clave primaria compuesta {pedido_id, producto_id}.

pedido_idproducto_idfechacliente_idcliente_nombreproducto_nombrepreciocantidad
101P012026-03-017Ana FloresTeclado1202
Razonamiento

PEDIDO_RAW ya tiene todos sus atributos atómicos (ninguna celda guarda varios valores). Al revisar 2FN, ¿qué atributos violan la dependencia completa respecto a la clave {pedido_id, producto_id}?

Aplicando 2FN

Se separan tres tablas: PEDIDO(pedido_id, fecha, cliente_id, cliente_nombre), PRODUCTO(producto_id, producto_nombre, precio) y DETALLE_PEDIDO(pedido_id, producto_id, cantidad), esta última con clave foránea hacia las otras dos.

Razonamiento

Dentro de la nueva tabla PEDIDO(pedido_id, fecha, cliente_id, cliente_nombre), ¿qué violación queda todavía, y cuál es la solución?

Esquema final (en 3FN)

PEDIDO(pedido_id PK, fecha, cliente_id FK) · CLIENTE(cliente_id PK, cliente_nombre) · PRODUCTO(producto_id PK, producto_nombre, precio) · DETALLE_PEDIDO(pedido_id PK, FK, producto_id PK, FK, cantidad)

Ejercicios de razonamiento

En estas preguntas no se te pide recordar una definición: se te da un escenario, y debes razonar cuál sería la respuesta correcta antes de comprobarla.

Razonamiento

Una universidad modela "Persona", que se especializa en "Estudiante" y "Docente". Un mismo individuo puede ser estudiante de posgrado y docente de pregrado al mismo tiempo. ¿Qué tipo de solapamiento es este?

Otro escenario

La tabla LIBRO(isbn, titulo, editorial_id, editorial_nombre, editorial_pais) tiene clave primaria isbn (una sola columna), y editorial_id → editorial_nombre, editorial_id → editorial_pais.

Razonamiento

¿En qué forma normal está esta tabla como máximo, y qué falla?

Un último escenario

Un sistema de talleres mecánicos registra HORARIO(vehiculo_placa, dia_semana, mecanico_id), donde cada mecánico atiende un único vehículo por día, pero un mismo vehículo puede pasar por varios mecánicos en días distintos.

Razonamiento

Si además se cumple la regla "cada mecánico solo trabaja en una sucursal fija" (mecanico_id → sucursal_id), y sucursal_id se agrega como columna, ¿qué problema aparece?

Actividades de repaso

Un repaso integrador de todo el módulo. Cada actividad se corrige al instante; tu progreso se guarda automáticamente en este navegador.

0 / 0
actividades correctas en toda la guía
Selección múltiple

¿Cuál de estas es una tabla por subclase, en el mapeo de una jerarquía ISA?

Verdadero o falso

Una dependencia funcional X → Y significa que Y determina el valor de X.

Selección múltiple

¿Qué forma normal elimina específicamente las dependencias parciales sobre una clave compuesta?

Selección múltiple

¿Cuál de estas anomalías ocurre cuando no puedes registrar un dato nuevo porque depende de la existencia de otro registro no relacionado?

Selección múltiple

¿Qué diferencia principal hay entre 3FN y BCNF?

Cheat Sheet

TérminoIdea clave
Generalización/especialización (ISA)Superclase con subclases que heredan sus atributos y añaden los propios.
Dependencia funcional X → YX determina de forma única el valor de Y.
Dependencia parcialUn atributo no clave depende solo de una parte de una clave compuesta.
Dependencia transitivaUn atributo no clave depende de otro atributo no clave, no directamente de la clave.
1FNAtributos atómicos, sin grupos repetitivos.
2FN1FN + sin dependencias parciales.
3FN2FN + sin dependencias transitivas.
BCNFTodo determinante de toda dependencia funcional debe ser superclave.

¿Sabías que...?

📐 El mismo autor del modelo relacional

Edgar F. Codd, quien propuso el modelo relacional en 1970, también definió las primeras tres formas normales poco después, como parte de la misma teoría.

🏷️ Por qué "Boyce-Codd"

BCNF lleva el nombre de Raymond F. Boyce y Edgar F. Codd, quienes la propusieron en 1974 para cerrar un caso especial que 3FN dejaba sin cubrir.

⚖️ A veces se desnormaliza a propósito

En sistemas con mucha lectura y poca escritura, a veces se introduce redundancia controlada ("desnormalización") a propósito, para ganar velocidad de consulta a cambio de más complejidad al actualizar.