En assosiativ entitet (register-tabellen) uttrykt med Chen-notasjon
Skisse av en avbildingstabell
En **assosiativ entitet** er et begrep som brukes innen teori om relasjonsdatabaser og entitet-relasjonsmodeller. En relasjonsdatabase krever implementering av en baserelasjon (eller basistabell) for å løse *mange-til-mange*-relasjoner. En basisrelasjon som representerer denne typen entitet kalles uformelt en **assosiativ tabell**.

Som nevnt ovenfor implementeres assosiative entiteter i en databasestruktur ved hjelp av assosiative tabeller som er tabeller som kan inneholde referanser til kolonner fra den samme eller andre databasetabeller i samme database.

En assosiativ tabell (eller koblingstabell) avbilder to eller flere tabeller sammen ved å referere til primærnøklene i hver av datatabellene. Med andre ord inneholder koblingstabellen en rekke fremmednøkler som hver har en *mange-til-en*-relasjon fra koblingstabellen til de enkelte datatabellene. Primærnøkkelen til den assositative tabellen er typisk sammensatt av kolonnene med selve fremmednøklene.[*klargjør*]

Assosiative tabeller er kjent under mange navn, inkludert **assosiasjonstabell**, **avbildningstabell**, **brotabell**, **kryssreferansetabell**, **krysstabell**, **lenketabell**, **mellomtabell**, **sammenføyningstabell** (*join table*), **snittabell** (*intersection table*) eller **transisjonstabell**.

Bruke av assosiative tabeller
-----------------------------

Et eksempel på praktisk bruk av en assosiativ tabell kan være å tildele tillatelser til brukere. Det kan være flere brukere, og hver bruker kan tildeles null eller flere tillatelser. Individuelle tillatelser kan gis til en eller flere brukere.

```
CREATE TABLE Users (
 UserLogin varchar(50) PRIMARY KEY,
 UserPassword varchar(50) NOT NULL,
 UserName varchar(50) NOT NULL
);

CREATE TABLE Permissions (
 PermissionKey varchar(50) PRIMARY KEY,
 PermissionDescription varchar(500) NOT NULL
);

-- Dette er koblingstabellen
CREATE TABLE UserPermissions (
 UserLogin varchar(50) REFERENCES Users (UserLogin),
 PermissionKey varchar(50) REFERENCES Permissions (PermissionKey),
 PRIMARY KEY (UserLogin, PermissionKey)
);

```

En visuell avbildning av tabellskjemaet beskrevet, med relasjoner angittEn visuell avbildning av tabellskjemaet beskrevet, med relasjoner angitt

En SELECT-kommando på et koblingstabell innebærer vanligvis skjøting (*join*) av hovedtabellen med koblingstabellen:

```
SELECT \* FROM Users
JOIN UserPermissions USING (UserLogin

```
Dette vil returnere en liste over alle brukere og deres tillatelser.

Insetting av en krysstabell innebærer flere steg. Først setter man inn data i hovedtabellen(e), og deretter oppdateres krysstabellen.

```
-- Opprett en ny bruker
INSERT INTO Users (UserLogin, UserPassword, UserName)
VALUES ('SomeUser', 'SecretPassword', 'UserName');

-- Opprett en ny tillatelse
INSERT INTO Permissions (PermissionKey, PermissionDescription)
VALUES ('TheKey', 'A key used for several permissions');

-- Til slutt oppdateres koblingstabellen
INSERT INTO UserPermissions (UserLogin, PermissionKey)
VALUES ('SomeUser', 'TheKey');

```
Ved hjelp av fremmednøkler vil databasen automatisk dereferere verdiene til UserPermissions-tabellen til sine egne tabeller.

Se også
-------

* Mange-til-mange (datamodellering)
* Relasjonsdatabase
* Unik nøkkel

Referanser
----------

1. ↑  «INF1300 Introduksjon til databaser: ORM og normalisering, Denormalisering og splitting, Transaksjonshåndtering – 10.11.2008 – Ellen Munthe-Kaas» (PDF).
2. ↑  «Assosiativ tabell – Bakkenblogg». *www.bakkenblogg.no*. Besøkt 9. mars 2022.