Assosiativ entitet
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[1] som representerer denne typen entitet kalles uformelt en assosiativ tabell.[2]
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
[rediger | rediger kilde]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 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å
[rediger | rediger kilde]Referanser
[rediger | rediger kilde]- ^ «INF1300 Introduksjon til databaser: ORM og normalisering, Denormalisering og splitting, Transaksjonshåndtering – 10.11.2008 – Ellen Munthe-Kaas» (PDF).
- ^ «Assosiativ tabell – Bakkenblogg». www.bakkenblogg.no. Besøkt 9. mars 2022.