Object-Relational Databases

Slides:



Advertisements
Hasonló előadás
Az Endnote bibliográfia adatbázis- kezelő szoftver alapvető használata 2013 Skultéti Attila
Advertisements

TÖMÖRÍTÉS. Fogalma A tömörítés egy olyan eljárás, amelynek segítségével egy fájlból egy kisebb fájl állítható elő. A tömörítési arány függ a fájl típusától,
A Non-Profit teljesítménymérés problémái (mérési és fejlesztési lehetőség) Márkus Gábor CVS, PVM, TVM, igazgató Stúdium Kft. Oktatás és Projekt menedzsment.
JAX-RS: JAVA API FOR RESTFUL WEB SERVICES. REST ARCHITEKTÚRÁJÚ WEBSZOLGÁLTATÁSOK LÉTREHOZÁSÁRA HASZNÁLJUK. AZ 1.1-ES VERZIÓTÓL KEZDVE A JAX-RS HIVATALOS.
CÉLCÉLCSOPORT  Egészségügyi szakmai tájékoztatás és betegtájékoztatás, az egészséges életvitelhez szükséges információk szolgáltatása, publikálása, áttekint-
Internet tudományos használata
Nemzeti Audiovizuális Archívum
Nagyméretű állományok küldése
PL/SQL gyakorlás Kalmár György.
Adatbázis rendszerek II.
Valószínűségi kísérletek
Adatbázis normalizálás
Programstruktúrák.
Az Internet megismerése
Idegen kulcsok Lokális és globális megszorítások Triggerek
Microsoft Office Publisher
Montázs készítése.
AWK ismétlés AWK: adatvezérelt nyelv:
ABR ( Adatbázisrendszerek)
Scilab programozás alapjai

Adatok importálása, rendezése és szűrése
Alkalmazásfejlesztés gyakorlat
ACCESS ALAPOK Alapfogalmak
SNMPView Készítette: Varga Gábor
T.R. Adatbázis-kezelés - Alapfogalmak Adatbázis:
Adatbázisok SQL.
Korrelációszámítás.
Kovács Gergely Péter Egyszerű lekérdezések
Triggerek Kalmár György.
A mozgási elektromágneses indukció
PHP-SQL adatbáziskezelő parancsai
adatbázis alapú rendszerek
Animációk.
Logikai programozás 2..
PL/SQL alapok Adatbázis-kezelés.
Adatbázis-kezelés (PL/SQL)
Business Mathematics
Adatbázis alapfogalmak
Kovács Gergely Péter Bevezetés
Az Endnote bibliográfia adatbázis-kezelő szoftver alapvető használata november Skultéti Attila
A nagyváradi villamosok megbízhatósági modellezése
Tilk Bence Konzulens: Dr. Horváth Gábor
Széchenyi István Egyetem
Informatikai gyakorlatok 11. évfolyam
Beépített assetek (Standard Assets).
Szoftverrobotok vs biorobotok Bemutatkozik Albert, a vállalati robot
Informatikai gyakorlatok 11. évfolyam
Egy lekérdezés végrehajtása
B M Java Programozás 4. Gy: Java GUI IT A N Tipper, MVC kalkulátor
Dr. Varga Beatrix egy. docens
Oracle Adatbázisok kezelése c#-ban
A Microsoft SharePoint testreszabása Online webhely
Megerősítéses tanulás Mély Q-hálók
A távoli asztal, valamint az Endnote használata a távoli asztalon
B M Java Programozás 9. Gy: Java alapok IT A N Adatkezelő 5.rész
Adatbázisok használata
Bibliográfia adatbázis-kezelő alkalmazások, EndNote 2018 Skultéti Attila
A szállítási probléma.
Idegen kulcsok Lokális és globális megszorítások Triggerek
SQL jogosultság-kezelés
Dr. Vasas Lívia, PhD december
Egy lekérdezés végrehajtása
A MEDLINE/PubMed JÖVŐJÉRŐL a szemantikus web tükrében
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Informatika Oktató: Katona Péter.
Bevezetés Tematika Számonkérés Irodalom
Access alapok Táblák, kapcsolatok, űrlapok.
Algoritmusok.
Vasas Lívia, PhD 2019 Témaközpontú irodalmazás, publikációs stratégia, tudományos közösségi hálók Közlési kötelezettség,
Előadás másolata:

Object-Relational Databases User-Defined Types Object ID’s Nested Tables

The relational model supports very-high-level queries. Merging Relational and Object Models Relációs és az O-O modell egyesítése Object-oriented models support interesting data types --- not just flat files. Maps, multimedia, etc. The relational model supports very-high-level queries. Object-relational databases are an attempt to get the best of both. Az O-O modell több érdekes adattípust támogat – nem csak egyszerű állományokat Térkép, multimédia, stb. A relációs modell magas szintű lekérdezéseket támogat Objektum-relációs adatmodell egy olyan kísérlet, amely mindkét világból a legjobbat szeretné nyújtani

Evolution of DBMS’s A fejlődés Object-oriented DBMS’s failed because they did not offer the efficiencies of well-entrenched relational DBMS’s. Object-relational extensions to relational DBMS’s capture much of the advantages of OO, yet retain the relation as the fundamental abstraction. Az O-O adatbáziskezelő rendszerek sokáig nem mutattak olyan hatékonyságot a jól bevált relációsokkal szemben, amely lehetővé tette volna az elterjedésüket. A relációs ADBKR-k objektum-relációs kiterjesztése az O-O megközelítés több előnyös tulajdonságát megragadja, mégis megtartja a relációt mint az alapvető absztrakciós mechanizmust és adatszerkezet

SQL-99 and Oracle Features SQL-99 és az ORACLE szolgáltatásai SQL-99 includes many of the object-relational features to be described. However, being so new, different DBMS’s use different approaches. We’ll sometimes use features and syntax from Oracle. SQL-99 több objektum relációs szolgáltatás leírását tartalmazta. Azonban mivel viszonylag új gondolat és szabvány volt abban az időben, minden gyártó a saját megközelítését és megvalósítását használta. A példákban az ORACLE szolgáltatásait és szintakszisát használjuk

User Defined Types Felhasználó által definiált adattípus A user-defined type, or UDT, is essentially a class definition, with a structure and methods. Two uses: As a rowtype, that is, the type of a relation. As the type of an attribute of a relation. Felhasználó által definiált adattípus (UDT rövidítés), egy O-O osztály definíciója, amelynek egy adatszerkezet, és metódusai. Két használati módja van : Sortípus, vagyis egy relációt mint adattípust kezelünk. Egy reláció attribútumának a típusa.

UDT Definition Felhasználó által definiált adattípus CREATE TYPE <typename> AS ( <list of attribute-type pairs> ); Oracle syntax: Add “OBJECT” as in CREATE … AS OBJECT. Follow with / to have the type stored. ORACLE-ben CREATE TYPE <typename> AS OBJECT Utána lehet a típust eltárolni.

Example: UDT Definition Példa CREATE TYPE BarType AS ( name CHAR(20), addr CHAR(20) ); CREATE TYPE BeerType AS ( name CHAR(20), manf CHAR(20)

References Hivatkozások If T is a type, then REF T is the type of a reference to T, that is, a pointer to an object of type T. Often called an “object ID” in OO systems. Unlike object ID’s, a REF is visible, although it is usually gibberish. Ha T egy UDT, akkor REF T a T –re történő hivatkozás típusa, vagyis egy mutató egy T típusú objektumra. Ezt „objektum azonosítónak” (OID) is hívják O-O rendszerekben. Azonban az OID-től eltérően – amelyek alapértelmezésben nem láthatók -, REF látható, bár általában nehezen értelmezhető.

Example: REF Példa MenuType Objektum valahogy így néz ki 3.00 CREATE TYPE MenuType AS ( bar REF BarType, beer REF BeerType, price FLOAT ); MenuType objects look like: MenuType Objektum valahogy így néz ki 3.00 To a BeerType Object - Hivatkozás To a BarType Object – Hivatkozás

UDT’s as Rowtypes UDT-k sortípusok A table may be defined to have a schema that is a rowtype, rather than by listing its elements. Syntax: CREATE TABLE <table name> OF <type name>; Egy relációs táblát egy sortípus segítségével mint sémával lehet definiálni, az elemeinek felsorolása helyett

Example: Creating a Relation Példa CREATE TABLE Bars OF BarType; CREATE TABLE Beers OF BeerType; CREATE TABLE Sells OF MenuType;

Values of Relations with a Rowtype Sortípusú relációk értékei Technically, a relation like Bars, declared to have a rowtype BarType, is not a set of pairs --- it is a unary relation, whose tuples are objects with two components: name and addr. Each UDT has a type constructor of the same name that wraps objects of that type. A kocsmák (Bars) relációt lehet, úgy definiálni, hogy a típusa a KocsmaTípus (BarType) , ez egy unáris reláció - nem párok halmaza -, amelynek a sorai két komponenst/mezőt tartalmaznak: név és cím. Mindegyik UDT-nek van egy típus konstruktora, amely összefogja ehhez a típushoz tartozó objektumokat.

Example: Type Constructor Példa típuskonstruktor The query SELECT * FROM Bars; Produces “tuples” such as: BarType(’Joe’’s Bar’, ’Maple St.’) Lekérdezés Eredménye sora

Accessing Values From a Rowtype Sortípus értékeinek elérése In Oracle, the dot works as expected. But it is a good idea, in Oracle, to use an alias for every relation, when O-R features are used. Example: SELECT bb.name, bb.addr FROM Bars bb; ORACLE-ben a pont (., dot) az elvártaknak megfelelően működik. Azonban az ORACLE-ben célszerű minden relációra egy álnevet használni akkor, amikor az O-R szolgáltatásokkal kezeljük. Példa

Accessing Values: SQL-99 Approach SQL-99 jellegű megközelítés In SQL-99, each attribute of a UDT has generator (get the value) and mutator (change the value) methods of the same name as the attribute. The generator for A takes no argument, as A(). The mutator for A takes a new value as argument, as A(v). SQL-99-ben, mindegyik UDT-nek van egy generátora (vedd ki az értéket) és egy mutátora a (változtasd meg az értéket), amelyeknek mint metódusoknak a nevei megegyeznek az attribútumok neveivel. Pl . Az A attribútum generátorának nincs argumense A(). Az A attribútum mutátorának az új érték az argumense pl. A(v).

Example: SQL-99 Value Access Példa SQL-99 jellegű adatelérés The same query in SQL-99 is Ugyanaz a lekérdezés SELECT bb.name(), bb.addr() FROM Bars bb;

Inserting Rowtype Values Sortípusú érték beillesztése In Oracle, we use a standard INSERT statement. But remember that a relation with a rowtype is really unary and needs that type constructor. Example: ORACLE-ben a szabványos INSERT-t használják De ne feledjük, hogy egy sortípusú reláció unáris és ezért szükség van a típuskonstruktorokra. INSERT INTO Bars VALUES( BarType(’Joe’’s Bar’, ’Maple St.’) );

Inserting Values: SQL-99 Style SQL-99 stílusban Create a variable X of the suitable type, using the constructor method for that type. Use the mutator methods for the attributes to set the values of the fields of X. Insert X into the relation. Egy alkalmas típusú X változót hozzunk létre, használva e típus típuskonstruktorát mint metódust. Használjuk a mutátor metódust az attribútumokra azért, hogy az X változó mezőinek értékét megadhassuk. Illesszük be az X változó értékeit a relációba

Example: SQL-99 Insert beillesztés példa The following must be part of a procedure, e.g., PSM, so we have a variable newBar. SET newBar = BarType(); newBar.name(’Joe’’s Bar’); newBar.addr(’Maple St.’); INSERT INTO Bars VALUES(newBar); Ez a lekérdezés egy eljárás része lehet, ezért van egy új változó, newBar. A mutátor metódusok megváltoztatják a név és cím komponenst. Mutator methods change newBar’s name and addr components.

UDT’s as Column Types UDT mint oszloptípus A UDT can be the type of an attribute. In either another UDT declaration, or in a CREATE TABLE statement, use the name of the UDT as the type of the attribute. UDT lehet egy attribútum típusa. Akár egy UDT deklarációban, vagy egy CREATE TABLE utasításban, az UDT típus neve úgy használható mint az attribútum típusa.

Example: Column Type oszloptípus CREATE TYPE AddrType AS ( street CHAR(30), city CHAR(20), zip INT ); CREATE TABLE Drinkers ( name CHAR(30), addr AddrType, favBeer BeerType Values of addr and favBeer components are objects with 3 and 2 fields, respectively. Az addr és favBeer komponensek értékei objektumok, 3 illetve 2 mezővel

Oracle Problem With Field Access Mező elérés problematikája az ORACLE-ben You can access a field F of an object that is the value of an attribute A by A.F . However, you must use an alias, say rr, for the relation R with attribute A, as rr.A.F . Egy objektum F mezőjét A.F kifejezéssel elérhetjük, amelynek ez az értéke Azonban egy álnevet kell használni, pl. rr, R relációra, annak A attribútumára mint pl. rr.A.F

Example: Field Access in Oracle Oracle-ben mezők elérése Wrong - Rossz: SELECT favBeer.name FROM Drinkers; Wrong Rossz : SELECT Drinkers.favBeer.name Right - Jó: SELECT dd.favBeer.name FROM Drinkers dd;

Following REF’s: SQL-99 Style A REF-k (hivatkozások) követése SQL-99 A -> B makes sense if: A is of type REF T. B is an attribute (component) of objects of type T. Denotes the value of the B component of the object pointed to by A. A -> B csak akkor értelmes ha: Ha A egy REF T típusú. A T típusú objektum attribútuma (komponense) B . Az A által hivatkozott, mutatott objektum B komponensének értékét jelöli

Example: Following REF’s REF-k (hivatkozások) követése Remember: Sells is a relation with rowtype MenuType(bar, beer, price), where bar and beer are REF’s to objects of types BarType and BeerType. Find the beers served by Joe: SELECT ss.beer()->name FROM Sells ss WHERE ss.bar()->name = ’Joe’’s Bar’; Then use the arrow to get the names of the bar and beer referenced First, use generator methods to access the bar and beer components

Example: Following REF’s REF-k (hivatkozások) követése Remember: Sells is a relation with rowtype MenuType(bar, beer, price), where bar and beer are REF’s to objects of types BarType and BeerType. Emlékezzünk rá, hogy az Sells (Értékesítés) egy olyan reláció egy olyan sortípussal ahol MenuType(bar, beer, price), és ahol bar (kocsma) és beer (sör) REF-ek, hivatkozások a BarType és BeerType típusú típusú objektumokra. and beer referenced A nyilat követve kapjuk meg a hivatkozott „kocsma”-t és „sör”-t Keresd meg a Joe által felszolgál söröket: SELECT ss.beer()->name FROM Sells ss WHERE ss.bar()->name = ’Joe’’s Bar’; Először használjuk a generátor metódust, hogy hozzáférjünk a kocsma és sör komponenshez

Following REF’s: Oracle Style Oracle stílusban REF (hiatkozás) követése REF-following is implicit in the dot. Just follow a REF by a dot and a field of the object referred to. Example: REF követése implicit a pontban. A REF-t nyomon követni: egy „elem” után egy pont, majd a megjelölt objektum mezőjének, amire hivatkozik, követésével kapjuk meg az értéket SELECT ss.beer.name FROM Sells ss WHERE ss.bar.name = ’Joe’’s Bar’;

Oracle’s DEREF Operator – Motivation DEREF művelet If we want the set of beer objects for the beers sold by Joe, we might try: SELECT ss.beer FROM Sells ss WHERE ss.bar.name = ‘Joe’’s Bar’; Legal, but ss.beer is a REF, hence gibberish. Ha a Joe által értékesített sörökre mint sör objektumok halmazára van szükségünk. Legális SQL, de ss.beer maga egy hivatkozás, ezért egy zagyvaság.

Using DEREF DEREF használata To see the BeerType objects, use: SELECT DEREF(ss.beer) FROM Sells ss WHERE ss.bar.name = ’Joe’’s Bar’; Produces values like: BeerType(’Bud’, ’Anheuser-Busch’) Ahhoz, hogy a BeerType objektumait láthassuk: Egy ilyen értéket állít elő:

Methods --- Oracle Syntax Metódusok – ORACLE szintakszis Classes are more than structures; they may have methods. We’ll study the Oracle syntax. Az osztályok többek mint adatszerkezetek; lehetnek metódusaik.

Method Definitions (Oracle) Metódus definicíó Declare methods in CREATE TYPE. Define methods in a CREATE TYPE BODY statement. Use PL/SQL syntax for methods. Variable SELF refers to the object to which the method is applied. A metódusok deklarálhatjuk a CREATE TYPE-ban Definiálhatjuk a CREATE TYPE BODY utasításban PL/SQL szerűen SELF változó arra az objektumra vonatkozik, amelyre a metódust alkalmazni kívánjuk.

Example: Method Declaration Let’s add method priceInYen to MenuType. CREATE TYPE MenuType AS OBJECT ( bar REF BarType, beer REF BeerType, price FLOAT, MEMBER FUNCTION priceInYen(rate IN FLOAT) RETURN FLOAT, PRAGMA RESTRICT_REFERENCES(priceInYen, WNDS) ); / What Oracle calls methods. “Write no database state.” That is, whatever priceInYen does it won’t modify the database.

Example: Method Declaration Metódus deklaráció Adjuk hozzá priceInYen-t, MenuType-hoz. Let’s add method priceInYen to MenuType. CREATE TYPE MenuType AS OBJECT ( bar REF BarType, beer REF BeerType, price FLOAT, MEMBER FUNCTION priceInYen(rate IN FLOAT) RETURN FLOAT, PRAGMA RESTRICT_REFERENCES(priceInYen, WNDS) ); / Oracle ezt nevezi metódusnak “Write no database state.” Vagyis priceInYen nem fogja módosítani az adatbázis állapotát

Method Definition – Oracle Style Metódus definíció Form of create-body statement: A create-body utasÍtás formája: CREATE TYPE BODY <type name> AS <method definitions = PL/SQL procedure definitions, using “MEMBER FUNCTION” in place of “PROCEDURE”> END; /

Example: Method Definition Metódus definíció Az (IN) Nincs a „body”-ban, csak a deklarációban CREATE TYPE BODY MenuType AS MEMBER FUNCTION priceInYen(rate FLOAT) RETURN FLOAT IS BEGIN RETURN rate * SELF.price; END; / Use parentheses only when there is at least one argument Csak akkor használjunk zárójelet, ha legalább egy argumentum van

Method Use Metódus használata Follow a name for an object by a dot and the name of the method, with arguments if any. Az objektum neve után legyen egy pont, majd a metódus neve, és végül az argumentumok, ha egyáltalán vannak. Example: SELECT ss.beer.name, ss.priceInYen(114.0) FROM Sells ss WHERE ss.bar.name = ’Joe’’s Bar’;

Order Methods: SQL-99 Rendező metódusok Each UDT T may define two methods called EQUAL and LESSTHAN. Each takes an argument of type T and is applied to another object of type T. Returns TRUE if and only if the target object is = (resp. <) the argument object. Allows objects of type T to be compared by =, <, >=, etc. in WHERE clauses and for sorting (ORDER BY). Mindegyik T UDT-re két metódust definiál (implicit módon) EQUAL és LESSTHAN. Mindegyik metódus egy T típus argumentumot kap bemenetként és egy másik T típusú objektumra alkalmazza. TRUE értéket ad vissza akkor és csak akkor ha a cél objektum = (vagy <) mint az az argumentumban szereplő objektum. Lehetővé teszi, hogy T típusú objektumokat hasonlítsunk össze =, <,>=, stb. segítségével a WHERE záradékban és a rendezésben (ORDER BY).

Order Methods: Oracle Rendező metódusok We may declare any one method for a UDT to be an order method. The order method returns a value <0, =0, or >0, as the value of object SELF is <, =, or > the argument object. Bármilyen UDT típusra bármelyik metódust rendező metódusnak deklarálhatjuk. A rendező metódusok visszatérő értéke <0, =0, vagy >0 lehet, ahogy a SELF objektumhoz viszonyítva az argumentum értéke <, =, vagy >

Example: Order Method Declaration Rendező metódusok deklarálás Order BarType objects by name: Rendezd BarType objektumokat név szerint: CREATE TYPE BarType AS OBJECT ( name CHAR(20), addr CHAR(20), ORDER MEMBER FUNCTION before( bar2 IN BarType) RETURN INT, PRAGMA RESTRICT_REFERENCES(before, WNDS, RNDS, WNPS, RNPS) ); / Read/write no database state/package state. A “package” is a collection of procedures and variables that can communicate values among them. Nincs adatbázis állapot változás

Example: Order Method Definition Rendező metódusok definíálás CREATE TYPE BODY BarType AS ORDER MEMBER FUNCTION before(bar2 BarType) RETURN INT IS BEGIN IF SELF.name < bar2.name THEN RETURN –1; ELSIF SELF.name = bar2.name THEN RETURN 0; ELSE RETURN 1; END IF; END; /

Oracle Nested Tables Beágyazott táblák Allows values of tuple components to be whole relations. If T is a UDT, we can create a type S whose values are relations with rowtype T, by: CREATE TYPE S AS TABLE OF T ; Megengedi, hogy a sorok egyes komponensei teljes relációk legyenek. Ha T egy UDT, létrehozhatunk egy S típust, amelynek az értékei relációk, amelyeknek a sortípusa viszont T,:

Example: Nested Table Type Beágyazott táblázatok létrehozása CREATE TYPE BeerType AS OBJECT ( name CHAR(20), kind CHAR(10), color CHAR(10) ); / CREATE TYPE BeerTableType AS TABLE OF BeerType;

Example --- Continued CREATE TABLE Manfs ( name CHAR(30), Use BeerTableType in a Manfs relation that stores the set of beers by each manufacturer in one tuple for that manufacturer. BeerTableType-t használjuk Manfs relációban, amelyik a sörök gyártónként tárolja, mindegyik gyártóra egy sorban. CREATE TABLE Manfs ( name CHAR(30), addr CHAR(50), beers beerTableType );

Storing Nested Relations A beágyazott relációk eltárolása Oracle doesn’t really store each nested table as a separate relation --- it just makes it look that way. Rather, there is one relation R in which all the tuples of all the nested tables for one attribute A are stored. Declare in CREATE TABLE by: NESTED TABLE A STORE AS R Oracle valójában nem tárolja el a beágyazott relációkat külön relációkként – még ha így is tűnik. Ehelyett, egy R reláció van, amelyben egy A attribútumra az összes beágyazott táblázatot és azok összes sorát eltárolja. Deklaráció a CREATE TABLE :

Example: Storing Nested Tables Beágyazott táblázatok tárolása CREATE TABLE Manfs ( name CHAR(30), addr CHAR(50), beers beerTableType ) NESTED TABLE beers STORE AS BeerTable; Note where the semicolon goes and doesn’t go. ; vessző használata!

Querying a Nested Table Beágyazott táblázatok lekérdezése We can print the value of a nested table like any other value. But these values have two type constructors: For the table. For the type of tuples in the table. Bármely beágyazott táblázat ugyanúgy jeleníthető meg, nyomtatható ki mint bármilyen más érték. Azonban ennek az alábbi két értéknek van két típuskonstruktora: A tábláknak- A soroknak a táblákban

Example: Query a Nested Table Find the beers by Anheuser-Busch: SELECT beers FROM Manfs WHERE name = ’Anheuser-Busch’; Produces one value like: BeerTableType( BeerType(’Bud’, ’lager’, ’yellow’), BeerType(’Lite’, ’malt’, ’pale’),… ) Anheuser-Busch söreit keressük ki: Eredmény érték

Querying Within a Nested Table Beágyazott táblázaton belüli lekérdezés A nested table can be converted to an ordinary relation by applying THE(…). This relation can be used in FROM clauses like any other relation. Egy beágyazott táblát hagyományos relációvá lehet konvertálni a THE() alkalmazásával Ezt a relációt, ugyanúgy mint bármely másikat, a FROM záradékban lehet alkalmazni.

Example: Use of THE THE () használata Keresd meg Anheuser-Busch által gyártott „ale”-ket : Find the ales made by Anheuser-Busch: SELECT bb.name FROM THE( SELECT beers FROM Manfs WHERE name = ’Anheuser-Busch’ ) bb WHERE bb.kind = ’ale’; The one nested table for the Anheuser-Busch Beers Beágyazott tábla Anheuser-Busch sörökre An alias for the nested table, which has no name Álnév a névnélküli beágyazott táblára

Turning Relations Into Nested Tables Relációk beágyazott táblává aalkítása Any relation with the proper number and types of attributes can become the value of a nested table. Use CAST(MULTISET(…) AS <type> ) on the relation to turn it into the value with the proper type for a nested table. Bármely reláció megfelelő számú attribútummal és azok illeszkedő adattípusaival egy beágyazott tábla értékei lehetnek. Használjuk a CAST(MULTISET(…) AS <type> ) utasítást a reláción azért, hogy a helyes adattípussal rendelkező értékeivel egy beágyazott táblázattá alakítsuk.

Example: CAST --- 1 Suppose we have a relation Beers(beer, manf), where beer is a BeerType object and manf a string --- the manufacturer of the beer. We want to insert into Manfs a new tuple, with Pete’s Brewing Co. as the name and a set of beers that are whatever Beers has for Pete’s. Tegyük fel, hogy a Beers(beer, manf) olyan reláció, hogy a sör (beer) egy BeerType típusú objektum és manf pedig egy string – a sör gyártója. Egy új sort akarunk beilleszteni a Manfs –ba , „Pete’s Brewing Co.” -t mint (gyártó) nevet és Pete által gyártott sörök halmazát.

Example: CAST --- 2 INSERT INTO Manfs VALUES ( ’Pete’’s’, ’Palo Alto’, MULTISET( SELECT bb.beer FROM Beers bb WHERE bb.manf = ’Pete’’s’ ) AS BeerTableType ) ); The set of BeerType objects for Pete’s Pete söreire BeerType objektumok halmaza Turn the set of objects into a nested relation Az objektumok halmazát beágyazott relációvá alakítjuk