idatt2103_databaser/ov1/modeller.sql

63 lines
2.1 KiB
SQL

/*
For alle tabellene i databasen har jeg vurdert at det ikke finnes noen tilfredsstillende kandidater som primærnøkkel.
Derfor har jeg laget surrogatnøkkelen "id" i alle tabellene, slik at disse kan indekseres og brukes som entydige nøkler.
De aller fleste fremmednøklene i min tabell er NOT NULL. Dette er fordi en leilighet ikke kan eksistere uten en bygning, og en bygning ikke kan eksistere uten et borettslag som eier det.
Riktignok kan medlemmer eksistere uten å eie en leilighet, så Medlem.leilighet_id kan være NULL.
De nøklene med NOT NULL har jeg gitt ON DELETE CASCADE så de aldri kan peke på ikke-eksisterende tupler.
Om en leilighet slettes blir Medlem.leilighet_id oppdatert til NULL.
Primærnøklene i databasen kan ikke være null, da det er viktig at primærnøklene er unike. Dersom vi lar feltet kunne være NULL er det fortsatt maksimalt en av tuplene som kan ha NULL som id.
*/
CREATE TABLE Borettslag (
id INT NOT NULL AUTO_INCREMENT ,
navn VARCHAR(255) NOT NULL,
gatenavn VARCHAR(255) NOT NULL,
husnummer INT NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE Bygning (
id INT NOT NULL AUTO_INCREMENT ,
borettslag_id INT NOT NULL,
gatenavn VARCHAR(255) NOT NULL,
husnummer INT NOT NULL,
CONSTRAINT fk_bygning_borettslag_id FOREIGN KEY (borettslag_id) REFERENCES Borettslag (id) ON DELETE CASCADE,
PRIMARY KEY (id)
)
CREATE TABLE Leilighet (
id INT NOT NULL AUTO_INCREMENT ,
bygning_id INT NOT NULL,
etasje INT NOT NULL,
romnr INT NOT NULL,
areal INT NOT NULL,
CONSTRAINT fk_leilighet_bygning_id FOREIGN KEY (bygning_id) REFERENCES Bygning (id) ON DELETE CASCADE,
PRIMARY KEY (id)
);
CREATE TABLE Medlem (
id INT NOT NULL AUTO_INCREMENT ,
fornavn VARCHAR(100) NOT NULL ,
etternavn VARCHAR(100) NOT NULL ,
epost VARCHAR(320),
telefon VARCHAR(20),
borettslag_id INT NOT NULL ,
leilighet_id INT,
CONSTRAINT fk_medlem_borettslag_id FOREIGN KEY (borettslag_id) REFERENCES Borettslag (id) ON DELETE CASCADE,
CONSTRAINT fk_medlem_leilighet_id FOREIGN KEY (leilighet_id) REFERENCES Leilighet (id) ON DELETE UPDATE,
PRIMARY KEY (id)
);