Modelo Entidad-Relación
Modelo Entidad-Relación (ER)
-
Entity Relationship Model (MER)
-
Permite modelar los requerimientos de una manera conceptual
- De una forma menos técnica que usar tablas
-
Es común generar el esquema de la base de datos a partir de un modelo ER
- Podemos evitar problemas de diseño y obtener modelos más concisos
-
Muy útil como complemento del modelo relacional paara documentar, visualizar y comunicar la estructura de datos
Componentes
Un modelo ER consiste en un diagrama con 3 grandes componentes:
Entidades
Atributos de entidades
Relaciones entre entidades
Entidades y atributos
- Cada entidad debe tener una llave, la cual aparece subrayada en el diagrama
- Comúnmente es un sólo atributo, pero pueden ser más de uno
- Misma idea que en el modelo relacional: la llave determina la entidad
Relaciones entre entidades
- También permitimos atributos en las relaciones como se ve en modelo entidad-relación
- Las relaciones no tienen llaves
Multiplicidad de relaciones
0 o muchos Productos pueden fabricar 0 o muchas Compañias
0 o muchos Productos pueden fabricar 0 o 1 Compañia
0 o 1 Producto puede fabricar 0 o muchas Compañias
0 o 1 Producto puede fabricar 1 o más Compañias
0 o muchos Productos puede fabricar solo 1 Compañia
Ejemplo modelo ER
Siempre a 1
- 1 a 1 (e.g., rut)
- n a 1 (e.g., categoría)
Atributos multivaluados
-
Atributos que toman más de un valor para una entidad particular
-
Se utiliza el doble óvalo (En este caso se representa con un doble círculo)
Una persona podría tener varias profesiones
Relaciones múltiples
Es posible relaciones entre 3 o más entidaades (aunque esto es menos común)
Si bien en este caso se utiliza multiplicidades no es tan común
- Tipicamente no hay restricciones
¿Qué significa esto?
- Cada persona que alquila en un local de video puede alquilar a lo más una pelicula
¿Qué significa esto?
- Cada persona que alquila en un solo local de video puede alquilar una pelicula
- O no alquilar nada
Siempre se puede transformar relaciones múltiples a binárias
Más flexible (para agregar más restricciones)
Roles
- A veces una misma entidad participa más de una vez con una misma relación
- Es útil por ejemplo en este caso para asignar roles a las distintas apariciones
Ejemplo 1
Ejemplo 2
Entidades débiles
- Una entidad débil es la depende de una entidad padre.
- La relación entre la entidad débil y su entidad padre siempre es a 1.
- Una entidad débil tiene una llave parcial (Se anota con un subrayado punteado)
- Una entidad débil queda determinada por su llave parcial y su llave entidad padre
Jerarquía entre entidades
- Podemos tener jerarquía entre entidades IsA (IsA = "Es una/un")
- Los atributos se heredan
Del modelo ER al modelo relacional
- Las entidades (no débiles) se pasan directamente a tablas:
Conservando sus atributos y llaves
- Producto(nombre, categoria, precio)
- Compañia(nombre, valor_accion)
- Las relaciones se pasan a tablas:
- Conservamos sus atributos
- La llave es la únion de las llaves de las entidades relacionadas (estas últimas por separado pasan a ser foreign_keys)
- Fabrica(nombre_producto, nombre_compañia, desde)
Simplificaciones según restricciones
- Por lo cual era correcto:
- Producto(nombre, categoria, precio)
- Compañia(nombre, valor_accion)
- Fabrica(nombre_producto, nombre_compañia, desde)
Actualmente se cambió una restricción del modelo ER (0,1)
- Producto(nombre, categoria, precio)
- Compañia(nombre, valor_accion)
- Fabrica(nombre_producto, nombre_compañia, desde)
Ahora si es que compañia es (1,1)
- La tabla de la relación se podría simplificar en estos dos casos:
- Si tenemos alguna multiplicidad 0 o 1 podemos simplificar la llave.
- Si tenemos alguna multiplicidad 1 podemos eliminar la tabla!
- Producto(nombre, precio, categoria, nombre_compania, valor_accion, desde)
- Compañia(nombre, valor_accion)
Atributos multivaluados de modelo ER a modelo relacional
- Persona(rut, nombre, direccion, profesion1, profesion2, profesion3)
- Esto podría generar muchos valores indefinidos(nulos)
- Persona(rut, nombre, direccion)
- Profesiones(rut_persona, profesion)
¿Caso de roles?
- Usuario(rut, nombre)
- Sigue(rut_seguidor, rut_seguido, desde)
¿Caso de entidades débiles?
- Se elimina la relación hacia la entidad padre (ya que siempre es a 1)
- La llave de la tabla asociada a la entidad débil es su llave parcial junto a la llave del padre.
- Curso(codigo, nombre)
- Evaluacion(nombre, codigo_curso, fecha)
¿Caso de jerarquías?
- Deportista(rut, nombre, edad)
- Futbolista(rut, equipo, posicion)
- Tenista(rut, grand_slam, raqueta)
- Futbolista(rut, nombre, edad, equipo, posicion)
- Tenista(rut, nombre, edad, grand_slam, raqueta)
¿Cuándo conviene 1era opción?
- Si hay deportistas que no son ni futbolistas ni tenistas
- Si vamos a hacer muchas consultas sobre deportistas en general
- Si hay mucho solapamiento entre las subclases (en este caso no hay solapamiento)
¿Cuándo conviene 2da opción?
- Poco o no hay solapamiento
Aplicar la solución "razonable" dependiendo del caso particular
Revisa el glosario de esta clase Glosario Modelo Entidad-Relación