310 likes | 507 Views
Tipovi podataka SQL 99 standard. Nikola Perić 369/2006 Mirjana Milić 319/2006. Uvod. SQL (Structured Query Language) je neproceduralni struktuirani upitni jezik IBM-ova istrazivačka laboratorija, kraj XX veka Postoji više standarda: ANSI, ISO, Microsoft SQL…. Razvoj SQL-a.
E N D
Tipovi podataka SQL 99 standard Nikola Perić 369/2006 Mirjana Milić 319/2006
Uvod • SQL (Structured Query Language) je neproceduralni struktuirani upitni jezik • IBM-ova istrazivačka laboratorija, kraj XX veka • Postoji više standarda: ANSI, ISO, Microsoft SQL…
Razvoj SQL-a • SQL/1986 • SQL/1989 • SQL/1992 • SQL/1999
SQL99 – Tipovi podataka • Standard SQL99 podržava: • predefinisane • referencne • nizovske • Row Data Structures tipove podataka • tipovi podataka koje kreira sam korisnik
Predefinisani tipovi podataka su: • numerički • stringovski • datumski • intervalni • logički tipovi
Numerički (tačni i približni) tipovi podataka su: • INTEGER ili INT • SMALLINT • NUMERIC • DECIMAL ili DEC • REAL • DOUBLE PRECISION • FLOAT
String Type Podaci tipa string su: bitski, karakterski tipovi i BLOB (ili BINARY LARGE OBJECT). Bitski tipovi podataka su: • BIT • BIT VARYING Karakterski tipovi podataka (fiksne i promenljive dužine) su: • CHARACTER ili CHAR • CHARACTER VARYING ili CHAR VARYING ili VARCHAR • CHARACTER LARGE OBJECT ili CLOB ili CHAR LARGE OBJECT
Primer: • Rat_i_mir CLOB(25M) CHARACTER SET CYRILLIC • sluzbenik_fotografija BLOB(50K)
Date Time Type Datumski tipovi podataka su definisani u odnosu na univerzalno koordinisano vreme (UTC): • DATE • TIME • TIMESTAMP • TIME WITH TIME ZONE • TIMESTAMP WITH TIME ZONE
Intervalni tipovi podataka se dele na: • Godina-mesec interval: • INTERVAL YEAR • INTERVAL MONTH • INTERVAL YEAR TO MONTH • Dan-vreme interval: • INTERVAL DAY TO HOUR • INTERVAL DAY TO MINUTE • INTERVAL SECOND • INTERVAL DAY TO SECOND • INTERVAL MINUTE TO SECUNDE
Boolean Type BOOLEAN je logički tip podatka sa moguće tri vrednosti: • TRUE • FALSE • UNKNOWN.
Ref Types Referencni tipovi podataka u SQL99 standardu implementiraju se na sledeći način: <attribute definition> ::= <attribute name> <data type> [ <reference scope check> ] [ <attribute default> ] [ <collate clause> ] <attribute default> ::= <default clause>
Primer: CREATE SCHEMA preduzece CREATE TYPE sluzbenik AS ( prezime CHARACTER VARYING (30), ime CHARACTER VARYING (30), manadzer REF (sluzbenik) SCOPE EVERY EXISTING TABLE );
CREATE TABLE zaposleni OF sluzbenik ( zaposleni_ref REF (sluzbenik) VALUES ARE SYSTEM GENERATED );
CREATE TABLE projekat_tim ( tim_ime CHARACTER VARYING (30), tim_lider REF (sluzbenik) SCOPE (zaposleni), tim REF (sluzbenik) SCOPE (zaposleni) ARRAY [10], izvestaji ROW (frekvenca CHARACTER VARYING (30), izvestaj_za REF (sluzbenik) SCOPE zaposleni) );
Arrays Nizovski tip podataka u SQL99 standaru: Primer: CREATE TABLE izvestaji ( id INTEGER, autori VARCHAR(15) ARRAY[20], naslov VARCHAR(100) );
Operacije nad kreiranom tabelom izveštaji: INSERT INTO izvestaji (id, autori, naslov) VALUES (10, ARRAY ['Date', 'Darwen'], 'A Guide to the SQL Standard’)
Primer: SELECT id, autori[1] AS ime FROM izvestaji SELECT r.id, a.ime FROM izvestaji AS r, UNNEST (r.autori) AS a (ime)
ROW Data Structures ROW Data Structures u SQL99 standardu: Primer: CREATE TABLE zaposleni ( ime CHAR (40), adresa ROW ( ulica CHAR (30), grad CHAR (20), post_br ROW ( original CHAR (5), plus4 CHAR (4) ) );
INSERT INTO zaposleni VALUES (‘John Doe’, (‘2225 Coral Drive’, ‘San Jose’, (‘95124’, ‘2347’) ) );
User Defined Types - UDT • Korisnički definisani tipovi podataka opisani su imenom, reprezentacijom, kao i odnosom sa drugim tipovima podataka. • Korisniči definisani metodi i funkcije opisani su imenom, listom parametara, rezultatom i implementacijom.
Primer: CREATE TABLE soba ( sobaID CHAR(10), sobaDuzina INTEGER, sobaSirina INTEGER, sobaPovrsina INTEGER, sobaObim INTEGER );
UPDATE soba SET sobaPovrsina = sobaDuzina;
CREATE TYPE plan.sobaTip AS CHAR(10) FINAL; CREATE TYPE plan.metri AS INTEGER FINAL; CREATE TYPE plan.metriKvadratni AS INTEGER FINAL; CREATE TABLE soba ( sobaID plan.sobaTip, sobaDuzina plan.metri, sobaSirina plan.metri, sobaObim plan.metri, sobaPovrsina plan.metriKvadratni);
UPDATE soba SET sobaPovrsina = sobaDuzina; UPDATE soba SET sobaDuzina = sobaSirina;
UDT u kolonama i tabelama CREATE TYPE adresa AS ( ulica CHAR (30), grad CHAR (20), drzava CHAR (2), post_br INTEGER) NOT FINAL; CREATE TYPE bitmap AS BLOB FINAL;
CREATE TYPE nekretnina AS ( vlasnik REF (osoba), cena novac, sobe INTEGER, velicina DECIMAL(8,2), lokacija adresa, opis text, slika bitmap, dokumentacija doc ) NOT FINAL ;
CREATE TABLE karakteristike OF nekretnina ( REF IS objekatID USER GENERATED )
SQL99 – UDT Metodi CREATE TYPE sluzbenik AS ( ime CHAR(40), fixna_plata DECIMAL(9,2), bonus DECIMAL(9,2) ) INSTANTIABLE NOT FINAL METHOD plata() RETURNS DECIMAL(9,2); CREATE METHOD plata() FOR sluzbenik BEGIN .... END;
UDT u strukturama podataka i podtabelama Primer: CREATE TYPE osoba ... NOT FINAL CREATE TYPE nekretnina ... NOT FINAL CREATE TYPE stan UNDER nekretnina ... NOT FINAL CREATE TYPE kuca UNDER nekretnina ... NOT FINAL CREATE TABLE klijenti OF osoba ( ...) CREATE TABLE karakteristike OF nekretnina CREATE TABLE stanovi OF stan UNDER karakteristike CREATE TABLE kuce OF kuca UNDER karakteristike
Za svaki red nadtabele postoji najviše jedan red iz neke podtabele. Count(karakteristike) >= Sum (Count(stanovi) + Count(kuce))