Objektrelasjonelle PostgreSQL-datatyper i Hobbyhuset.
Både Kunde og Ansatt inneholder kolonner Fornavn og Etternavn. Disse lar seg representere som et sammensatt navn ved en brukerdefinert datatype:
CREATE TYPE NavnType AS
(
Fornavn VARCHAR(50) NOT NULL,
Etternavn VARCHAR(50) NOT NULL,
);
En skisse av hvordan denne datatypen kan brukes i definisjonen av tabellen Kunde:
CREATE TABLE Kunde
(
...
Navn NavnType,
...
);
I løsningsforslag til oppgave 1e blir fornavn og etternavn til hver kunde vist. SELECT-delen må da skrives om som følger:
SELECT K.KNr, (Navn).Fornavn, (Navn).Etternavn, ...
Ved å innføre en brukerdefinert datatype for detaljene på en ordre, kan vi samle alle opplysninger om én ordre på én rad.
CREATE TYPE OrdrelinjeType AS
(
VNr CHAR(5),
PrisPrEnhet DECIMAL(8,2) NOT NULL,
Antall INTEGER NOT NULL,
)
Tabellen Ordre kan deretter bygges ut med en array-kolonne Linjer:
CREATE TABLE Ordre
(
OrdreNr INTEGER,
OrdreDato DATE NOT NULL,
SendtDato DATE,
BetaltDato DATE,
KNr INTEGER NOT NULL,
Linjer[] OrdrelinjeType[],
CONSTRAINT OrdrePN PRIMARY KEY (OrdreNr),
CONSTRAINT OrdreKundeFN FOREIGN KEY (KNr) REFERENCES Kunde (KNr)
);
Det gjenstår å omprogrammere noen av spørringene i kapittel 4. Her er først et enkelt eksempel på hvordan man kan hente ut ordrelinjer – spørringen viser første ordrelinje på hver ordre:
SELECT OrdreNr, OrdreDato, KNr, Linjer[0]
FROM Ordre
PostgreSQL-funksjonen UNNEST kan brukes for å "ekspandere" en array. Neste spørring leverer det samme som en indre likekobling mellom Ordre og Ordrelinje i den "vanlige" utgaven av Hobbyhuset.
SELECT OrdreNr, OrdreDato, KNr, UNNEST(Linjer)
FROM Ordre;
Kolonnen Kunde.Kjønn kan håndteres som en oppramstype:
CREATE TYPE KjønnType AS ENUM ('mann', 'kvinne');
Fjelltopper, elver og kommuner.
Vi kan her lage en tabell for fjelltopper, en for elver og en for kommuner. Tabellene kan inneholde "vanlige" egenskapsdata, som f.eks. navn, og dessuten geometridata (koordinater) i en egen kolonne Geometri med datatype Geography – dette forutsetter PostgreSQL-utvidelsen PostGIS. For en fjelltopp vil Geometri-kolonnen være et punkt, for en elv vil kolonnen være en polylinje og for en kommune vil kolonnen være et polygon. Verdier i datatypen Geometry knyttes for øvrig til et såkalt referansesystem, les mer om dette i dokumentasjonen for PostGIS.
CREATE TABLE Fjelltopp
(
Id INTEGER,
HøydeOverHavet INTEGER,
Geometri GEOMETRY,
PRIMARY KEY (Id)
);
CREATE TABLE Elv
(
Id INTEGER,
Navn VARCHAR(100),
Geometri GEOMETRY,
PRIMARY KEY (Id)
);
CREATE TABLE Kommune
(
Id INTEGER,
KommuneNr VARCHAR(4),
Navn VARCHAR(100),
Geometri GEOMETRY,
PRIMARY KEY (Id)
);
Studieomtaler i MongoDB.
Innholdet på XML-filen laget til oppgave 1 i kapittel 14 lar seg oversette relativt direkte til JSON. XML-elementer med flere forskjellige "barn" blir til JSON-objekter, mens XML-elementer med et antall barn av samme "type" blir håndtert ved JSON-arrays. BSON er en "binærversjon" av JSON og det finnes verktøy som konverterer fra JSON til BSON. Metodene i JSON-API'et til MongoDB kan kalles med JSON-verdier, men data blir lagret på BSON-format.
Et forslag til JSON-fil: studiehandbok.json
MongoDB dokumentdatabase for golfapplikasjon.
Det virker naturlig å lage følgende dokumentsamlinger:
Utdrag av eksempeldata for en golfrunde:
{
"RundeNr": 173,
"Dato": "2024-05-16",
"BaneNr": 23,
"Resultater":
[
{
"SpillerNr": 562,
"HullNr": 1,
"AntallSlag": 5
},
{
"SpillerNr": 287,
"HullNr": 1,
"AntallSlag": 4
}
]
}
JavaScript-spørringer mot golfdatabasen i oppgave 4.
Løsningsforslag er ikke laget ennå.
Det er ikke laget løsningsforslag til KI-oppgavene (oppgaveteksten beskriver hva man skal gjøre).