Entidad asociativa
Una entidad asociativa es un término utilizado en la teoría entidad-relación. Una base de datos relacional requiere la implementación de una relación base (o tabla base) para resolver relaciones "muchos a muchos". Una relación base que representa este tipo de entidad se denomina, informalmente, tabla asociativa.
Como se mencionó anteriormente, las entidades asociativas se implementan en la estructura de una base de datos utilizando tablas asociativas, que son tablas que pueden contener referencias a columnas de la misma o de diferentes tablas.
Una tabla asociativa (o de unión) mapea dos o más tablas haciendo referencia a las claves primarias (CP) de cada tabla. En efecto, contiene varias claves foráneas (CF), cada una en una relación de muchos a uno desde la tabla asociativa a las tablas individuales. La CP de la tabla asociativa se compone típicamente de las mismas columnas CF.
Las tablas asociativas se conocen coloquialmente con muchos nombres, incluidos tabla de asociación, tabla puente, tabla de referencias cruzadas, tabla unión, tabla combinada, tabla intermedia, tabla de intersección, tabla de unión, tabla de enlace, la resolución de muchos a muchos, tabla de mapa, tabla de mapeo, tabla de emparejamiento, tabla dinámica (como se usa incorrectamente en Laravel, no debe confundirse con el uso correcto de la tabla dinámica en hojas de cálculo) o tabla de transición.
Uso de tablas asociativas
[editar]Un ejemplo del uso práctico de una tabla asociativa sería asignar permisos a los usuarios. Puede haber varios usuarios y a cada usuario se le pueden asignar cero o más permisos. Se pueden otorgar permisos individuales a uno o más usuarios.
CREATE TABLE Usuarios(
LoginUsuario varchar(50) PRIMARY KEY,
ContrasenaUsuario varchar(50) NOT NULL,
NombreUsuario varchar(50) NOT NULL
);
CREATE TABLE Permisos (
LlavePermiso varchar(50) PRIMARY KEY,
DescripcionPermiso varchar(500) NOT NULL
);
-- Esta es la tabla asociativa
CREATE TABLE UsuarioPermisos (
LoginUsuario varchar(50) REFERENCES Usuarios(LoginUsuario),
LlavePermiso varchar(50) REFERENCES Permisos(LlavePermiso),
PRIMARY KEY (LoginUsuario, LlavePermiso)
);
Una instrucción SELECT
en una tabla asociativa usualmente implica el cruce de la tabla principal con la tabla asociativa:
SELECT * FROM Usuarios
JOIN UsuarioPermisos USING (LoginUsuario);
Esto retornará una lista de todos los usuarios y sus permisos.
La inserción en una tabla asociativa involucra diversos pasos: primero insertar en las tablas principales y después insertar en la tabla asociativa.
-- Creación de un nuevo usuario
INSERT INTO Usuarios (LoginUsuario, ContrasenaUsuario, NombreUsuario)
VALUES ('CiertoUsuario', 'ClaveSecreta', 'Nombre del usuario');
-- Creación de un nuevo permiso
INSERT INTO Permisos (LlavePermiso, DescripcionPermiso)
VALUES ('LaLlave', 'Una llave usada para diversos permisos');
-- Finalmente, insertar en la tabla asociativa
INSERT INTO UsuarioPermisos (LoginUsuario, LlavePermiso)
VALUES ('CiertoUsuario', 'LaLlave');
Al usar claves foráneas en la tabla asociativa, la base de datos podrá de-referencia los valores de la tabla UsuarioPermisos a las de las tablas Usuarios y Permisos.
Referencias
[editar]- Hoffer, Jeffrey A.; Prescott, Mary B.; McFadden, Fred R. (2004). Modern Database Management (7th edición). Prentice Hall. ISBN 978-0131453203.
- Codd, E. F. (1970). «A Relational Model of Data for Large Shared Data Banks». Communications of the ACM (ACM) 13 (6): 377-387. doi:10.1145/362384.362685.