250 likes | 387 Views
Objekt-relationel DBMS. 4.5 The Object-Relational Model 9.4 User-Defined Types in SQL 9.5 Operations on Object-Relational Data Ullman: Object-Relational Features of Oracle. Intro. til objekt-relationel DBMS. Forsøg på at kombinere det bedste fra relationel DBMS
E N D
Objekt-relationel DBMS 4.5 The Object-Relational Model 9.4 User-Defined Types in SQL 9.5 Operations on Object-Relational Data Ullman: Object-Relational Features of Oracle Objekt-relationel DBMS
Intro. til objekt-relationel DBMS • Forsøg på at kombinere det bedste fra • relationel DBMS • tabeller, SQL, kendt teknologi • objektorienteret tankegang • mere virkelighedstro modellering • Standardiseret i SQL3 / SQL99 • Implementeret af bl.a. Oracle • men ikke helt som SQL3 standarden! • Der findes rene objekt-orienterede DBMS'er • ingen relationelle features • ODL (Object Definition Language) Objekt-relationel DBMS
Typer, 166 • Relationel DBMS • atomiske standard-typer • number, char, varchar, etc. • Objekt-relationel DBMS • atomiske standard-typer • egne typer (en slags klasser) • UDT, user-defined data types Objekt-relationel DBMS
Indlejrede relationer, 167 • Relationel DBMS • 1NF alle attributter er atomiske • Objekt-relationel DBMS • attributter kan være sammensatte • f.eks. forekomster af egen datatype [heterogen] • eller collection [homogen] (som Java: array, List) • Fig. 4.17, side 168 Objekt-relationel DBMS
Referencer, 169 • Relationel DBMS • fremmednøgler kæder data sammen • Objekt-relationel DBMS • referencer (nyt koncept) kæder data sammen • ligner objekt-referencer i Java Objekt-relationel DBMS
OO features i SQL3 /SQL99, 449 • Centreret omkring UDT'er • user-defined data types • tabel af type UDT • tabel med attribut af type UDT • Syntaks CREATE TYPE typeNavn AS ( att1 datatype1, att2 datatype2 ); • Figur 9.10, side 450 Objekt-relationel DBMS
Metoder, 451 • UDT'er kan have metoder (funktioner, procedurer) • Syntaks • CREATE TYPE … • METHOD name() RETURNS type; • Eksempel 9.21, side 451 • CREATE METHOD metodeNavn (parameters) RETURNS type BEGIN … END; Objekt-relationel DBMS
Tabeller af UDT'er, 452 • Syntaks • CREATE TABLE tabelNavn OF type • Hver række i tabellen er en forekomst af UDT-typen. Objekt-relationel DBMS
Referencer, 452 • Et objekt (af en UDT) kan referere til et andet objekt • a la referencer i Java • 2 syntakser • att REF(typeNavn) • att henviser til objekt af typen typeNavn • att REF(typeNavn) SCOPE tabelNavn • att henviser til objekt af typen typeNavn i tabellen tabelNavn • Eksempel 9.23, side 453 • bestMovie henviser til en objekt af typen MovieType i tabellen Movie Objekt-relationel DBMS
Mål for referencer, 453 • Det man henviser til skal være "referer-bart" • kaldes "object identifier" • en slags moderne "primær-nøgle" • Eksempel Fig. 9.11, side 454 • 2 typer object identifiers • SYSTEM GENERATED • genereres af DBMS • DERIVED • bruger primær-nøgle Objekt-relationel DBMS
Operationer på objekt-relationel data, 455 • Følge referencer til andre objekter • obj -> reference • Adgang til attributter i objekter • obj.attribut • Metoder • Ordning / sortering Objekt-relationel DBMS
Følge referencer til andre objekter, 455 • Eksempel 9.26, side 456 • DEREF (movie) • den tabel hvor i målet for referencen findes • star -> name • følg referencen star til name (i movie) • syntaks som i programmeringssproget C/C++ Objekt-relationel DBMS
Adgang til attributter i objekter, 456 • Eksempel 9.27, side 456 • Movie er en tabel af typen MovieType • m er et objekt af MovieType • Adgang til attributter (dot notation) • m.year() • m.title() Objekt-relationel DBMS
2 slags metoder, 457 • Generator methods • en slags constructor • samme navn som UDT'en • ingen parametre • laver nyt, tomt objekt • Java analogi: default (parameter-løs) constructor • Mutator methods • for enhver attribut x i en UDT er der en metode x(v), der sætter værdien af x til værdien v. • Java analogi: public set-metode til alle attributter • Fig. 9.12, side 458 • Forkortet notation: Parameter-fyldt constructor Objekt-relationel DBMS
Ordning / sortering af objekter, 458 • Primitive datatyper (number, char osv.) har en orden / sortering • bruges i order by osv. • UDT'er kan gives en orden / sortering • Fig. 9.13, side 460 • Java analogier: • Object.equals (Object other) • java.util.Comparable Objekt-relationel DBMS
OO features i Oracle • Oracle følger ikke SQL3 standarden mht. OO features! • Centreret om UDT som SQL3, men syntaksen er anderledes. • Efterfølgende er ikke omtalt i bogen • Taget fra Ullman: Object-Relational Features of Oracle • http://www-db.stanford.edu/~ullman/fcdb/oracle/or-objects.html Objekt-relationel DBMS
Oracle: Defining types • Syntaks • CREATE OR REPLACE TYPE typeNavn AS OBJECT ( … ); • "OR REPLACE" er frivilligt • husk syntaksen "AS OBJECT" • DROP typeNavn • sletter typen • CREATE TABLE tabelNavn ( … att typeNavn …) • Eksempel, side 1 • Specielt for SQL*Plus create type ( …) / Oracle udfører create type sætningen!! Objekt-relationel DBMS
Oracle: Constructing objects • INSERT kan bruge objekter af typer. • Alle typer har en constructor • typeNavn(value1, value2) • INSERT INTO tabelNavn VALUES (att, typeNavn(value1, value2) ); • Eksempel • INSERT INTO Lines, side 2 Objekt-relationel DBMS
Oracle: Arv mellem typer • En type kan arve egenskaber (attributter og metoder) fra en super-type • Nu bliver det meget mere interessant at lave arv (IS-A) i ER-diagrammer! • Syntaks • CREATE OR REPLACE TYPE UNDER super-type ( … specielle egenskaber for sub-type … ); Objekt-relationel DBMS
Oracle: Metoder • Metoder skal • erklæres i create type • eksempel CREATE TYPE LineType, side 2 • hvis metoden skal bruges i en select-sætning, så skal den være READ-ONLY • PRAGMA RESTRIC_REFERENCES (metode, WNDS) • WNDS: write no database state • defineres i speciel create type body • eksempel CREATE TYPE BODY, side 3 Objekt-relationel DBMS
Oracle: Select fra typer, 3 • Sædvanlig struktur • SELECT … FROM … WHERE • Anvendelse af metoder (read-only) • eks side 3 • Der skal bruges alias i FROM-delen! • Man "dotter" sig ned til attributter • eksempel, side 3 • Man kan selecte primitive data, objekter og referencer • Man join'er ikke! Man vælger en central tabel og dotter (følger referencer) sig til de ønskede data SELECT si.movies.title FROM StarsIn si WHERE si.star.name = 'Anders'; Objekt-relationel DBMS
Oracle: Referencer • Ethvert objekt har et unikt objektID • skabes af Oracle • Et objekt kan referere til andre objekter • syntaks • att REF typeNavn • att refererer til et objekt af typen typeNavn • eksempel, side 4 • Man kan selecte referencer til andre objekter • syntaks • select REF (att) • eksempel, side 4 • Bemærk de 2 forskellige anvendelser af ordet REF. Objekt-relationel DBMS
Oracle: Insert • INSERT i tabel uden REF typer • 2 muligheder • INSERT INTO … VALUES (Type(att, … ) ) • bruger default constructor på Type • INSERT INTO … VALUES (att, …) • helt almindelig INSERT • INSERT i tabel med REF typer • referencer skal selectes fra eksisterende data • INSERT INTO tabel1 • select att, REF(att2) from tabel 2 where … Objekt-relationel DBMS
Oracle: Indlejrede tabeller • En tabel kan indeholde tabeller!! • En attribut kan være en tabel!! • Syntaks • CREATE TYPE typeNavn AS TABLE OF andenType • Eksempel CREATE TYPE PolygonType, side 5 • indre tabeller gemmes ikke i ydre tabel, men i selvstændig tabel med eget navn • NESTED TABLE indreTabel STORE AS egetNavn • INSERT skal indsætte hele tabeller! • Eksempel side 6 Objekt-relationel DBMS
Oracle: Indlejrede tabeller, select, 6 • Select fra indre tabel kan bruges i from-sætning • Eksempel SELECT ss.x …, side 6 • Nyt keyword THE til "indhegning" indre select-sætninger. Objekt-relationel DBMS