tipovi podataka u sql:1999...
TRANSCRIPT
Nikola Perić Mirjana Milić
Tipovi podataka u SQL:1999 standardu
- seminarski rad -
Beograd 2007.
SADRŽAJ Predgovor .................................................................................................................... 1 Uvod ............................................................................................................................. 3 Razvoj SQL‐a ............................................................................................................... 4 Tipovi podataka .......................................................................................................... 5 Predefinisani tipovi podataka ................................................................................... 5 Referencni tipovi podataka ....................................................................................... 6 Nizovski tipovi podataka .......................................................................................... 7 ROW Data Structures ................................................................................................. 7 Korisnički tipovi podataka ........................................................................................ 8 Prilog – „MS SQL Server” .......................................................................................... 11 Literatura ...................................................................................................................... 12
SQL:1999 ‐ Tipovi podataka 1 PREDGOVOR Materijal koji je pred Vama, pod nazivom „Tipovi podataka u SQL:1999 standardu”, predstavlja seminarski rad studenata Mirjane Milić i Nikole Perića u okviru kursa „Relacione baze podataka” koji se izučava na redovnim studijama informatike Matematičkog fakulteta Univerziteta u Beogradu. Celokupan izloženi materijal je koncipiran kao kratak pregled tipova podataka upitnog jezika SQL:1999 standard, i za sada je dostupan u elektronskom obliku. Beograd, novembar 2007. Autori Kontakt:
Mirjana Milić, e‐mail: [email protected] Nikola Perić, e‐mail: [email protected]
2 SQL:1999 – Tipovi podataka
SQL:1999 ‐ Tipovi podataka 3 UVOD
SQL (Structured Query Language) je neproceduralni struktuirani upitni jezik, za razliku od proceduralnih jezika ili jezika treće generacije (kada je nastao).
Sam nastanak upitnog jezika SQL‐a se vezuje za IBM‐ovu istraživačku laboratoriju u San Hozeu u Kaliforniji (SAD), krajem dvadesetog veka.
Trenutno u svetu postoji više standarda SQL jezika, pri čemu su najpoznatiji: ANSI‐92, ISO, Microsoft SQL, ... U principu, osnovni standard je ANSI. Svi drugi standardi se u manjoj ili većoj meri razlikuju od ovog standarda, a u najvećem broju slučajeva radi se o proširenjima osnovnog SQL standarda kojima se ovaj jezik pretvara u pravi proceduralni jezik.
4 SQL:1999 – Tipovi podataka RAZVOJ SQL-a SQL:1986 standard
Karakteriše ga mogućnost kreiranja osnovnih tabela, mogućnost postavljanja jednostavnih upita, nezavisan je od jezika… SQL:1989 standard
Zasnovan je na standardu SQL:1986 iako je od njega funkcionalno kompletniji jer obezbeđuje referencijalni integritet i povezivanje sa programskim jezicima COBOL, FORTRAN, Pascal, C, Ada, … SQL:1992 standard Poznatiji je pod nazivom SQL2 ili SQL92 ili pod punim nazivom „Međunarodni standardni jezik baza podataka (1992)” („International Standard Database Language SQL (1992)”). Nastao je na temeljima standarda SQL:1989 nadogradnjom sa bitskim tipovima podataka, kompletnim uslovnim izrazima (CASE), skupovima karaktera, menadžerom odnosa/veza/spojeva, datumskim tipovima podataka, domenima, dinamičnim SQL‐om, poboljšani upitima, višejezičnim setovima karaktera, prirodnim spajanjima (unitrašnjim ili spoljašnjim), upitima nad vrstama i tabelama, privremenim tabelama, podupitima nad slučajevima u toku njihovog trajanja, unijom, presekom, razlikom … SQL:1999 standard
Osnova poslednjeg zvaničnog standarda je SQL:1992 standard na koji su dodati modeli podataka (koji su opisani svojom strukturom, odnosima i operacijama), više vrsta naredbi, nove funkcije nad logičkim tipovima podataka, proširen skup funkcija nad datumsim tipom podataka, klasa intervalnih funkcija sa (za sada) samo jednom funkcijom – ABS (ova funkcija je u potpunosti analogna fukciji ABS koja se primenjuje na numeričke vrednosti), a po prvi put su u SQL uvedeni novi tipovi podataka: reference, nizovi, ROW Data Structures, tipovi koje definiše korisnik, Boolean, Blob, Clob. Tako SQL:1999 standard više nije relaciono‐upitni jezik, već relaciono‐objektni jezik za rad nad upitima podataka.
SQL:1999 ‐ Tipovi podataka 5 SQL:1999 – TIPOVI PODATAKA
SQL:1999 standard podržava predefinisane, referencne, nizovske tipove podataka, kao i one podatke koje kreira sam korisnik i Row Data Structures. SQL:1999 – Predefinisani tipovi podataka Predefinisani tipovi podataka su: numerički, stringovski, datumski, intervalni i logički tipovi.
Numerički (tačni i približni) tipovi podataka su: • INTEGER ili INT (32‐bitni ceo broj) • SMALLINT (16‐bitni ceo broj) • NUMERIC • DECIMAL(p, q) ili DEC(p, q) je decimalni broj, gde je p broj cifara
decimalnog broja ( 311 ≤≤ p ), a q broj cifara razlomljenog dela ( pq ≤≤0 )
• DECIMAL ≡ DECIMAL(5) • FLOAT(p) je broj u pokretnom zarezu jednostruke tačnosti
( 241 ≤≤ p ) ili dvostruke tačnosti ( 5325 ≤≤ p ) • REAL ≡ FLOAT(24) • DOUBLE PRECISION ≡ FLOAT • FLOAT ≡ FLOAT(53)
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(m) ili CHAR(m) je niska znakova fiksne dužine m
( 2541 ≤≤ m ) • CHARACTER ≡ CHAR ≡ CHAR(1) • CHARACTER VARYING ili CHAR VARYING ili VARCHAR • CLOB ili CHARACTER LARGE OBJECT ili CHAR LARGE
OBJECT Primer:
Rat_i_mir CLOB(25M) CHARACTER SET CYRILLIC sluzbenik_fotografija BLOB(50K)
6 SQL:1999 – Tipovi podataka
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 dodina‐mesec interval: • INTERVAL YEAR • INTERVAL MONTH • INTERVAL YEAR TO MONTH
i dan‐vreme interval: • INTERVAL DAY TO HOUR • INTERVAL DAY TO MINUTE • INTERVAL SECOND • INTERVAL DAY TO SECOND • INTERVAL MINUTE TO SECUNDE
BOOLEAN je logički tip podatka sa moguće tri vrednosti: TRUE, FALSE ili UNKNOWN. SQL:1999 – Referencni tipovi podataka
Referencni tipovi podataka u SQL:1999 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));
SQL:1999 – Tipovi podataka 7 SQL:1999 - Nizovski tipovi podataka 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’)
Pristup elementima niza:
po indeksu jednostavnom deklaracijom (npr. upit) direktnom promenom niza u tabeli izborom samog elementa i/ili njegovog indeksa izbacivanjem
Primer: SELECT id, autori[1] AS ime FROM izvestaji SELECT r.id, a.ime FROM izvestaji AS r, UNNEST (r.autori) AS a (ime)
SQL:1999 - ROW Data Structures 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’)
) );
8 SQL:1999 – Tipovi podataka SQL:1999 – Korisnički tipovi podataka
Tipovi podataka koje definiše korisnik predstavljaju entitete, na primer: zaposleni, projekat, novac, poligon, slike, tekst, jezici, ... Metode i funkcije koje je definiše korisnik su operacije koje opisuju ponašanje entiteta, na primer: angažovanje zaposlenog, odobriti projekat, pozajmiti novac, senčenje poligona, editovanje slike, teksta, ...
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;
U ovom primeru neće se javiti greška jer su i površina i dužina sobe definisani kao isti tip podataka – INTEGER, tako da ne postoji semantička greška iako se dužina i površina ne izražavaju istim mernim jedinicama. Ali ako se kreiraju različiti tipovi podataka:
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;
U ovom slučaju doći će do greške jer se tip podataka korišćen za površinu sobe razlikuje od tipa podatka korišćenog za dužinu sobe. Ali prilikom izjednačavanja dužine i širine sobe neće doći do greške jer su korišćeni isti tipovi podataka.
UPDATE soba SET sobaDuzina = sobaSirina;
SQL:1999 – Tipovi podataka 9
Za korišćenje korisnički definisanih tipova podataka u kolonama i tabelama potrebno je definisati tipove podataka:
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
a zatim treba uvrstiti tipove podataka tako da tipovi atributa postanu kolone, pa dodajemo jednu kolonu za definisanje reference za vrstu, s tim da ceo tip koji je definisan može postatiti tabela:
CREATE TABLE karakteristine OF nekretnina ( REF IS objekatID USER GENERATED )
gde je nekretnina tip tabele, a adresa i bitmap su tipovi kolona.
Metode SQL poziva kao funkcije koje su definisane za korisničke tipove podataka. Primer:
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;
Korišćenje korisnički definisani tipovi podataka u strukturama podataka i
podtabelama zahteva definisanje podataka:
CREATE TYPE osoba ... NOT FINAL CREATE TYPE nekretnina ... NOT FINAL CREATE TYPE stan UNDER nekretnina ... NOT FINAL CREATE TYPE kuca UNDER nekretnina ... NOT FINAL
10 SQL:1999 – Tipovi podataka a zatim kreirati tabele:
CREATE TABLE klijenti OF osoba ( ...) CREATE TABLE karakteristike OF nekretnina CREATE TABLE stanovi OF stan UNDER karakteristike CREATE TABLE kuce OF kuca UNDER karakteristike
Podtabele su jedini način particionisanja velike tabele u više manjih zavisnih
tabela. Za svaki red nadtabele postoji najviše jedan red iz neke podtabele, ali je Count(Properties) >= Sum (Count(Condos) + Count(Houses))
Na primer, ako postoji 100 različitih nekretnina u tabeli karakteristike, i ako u toj tabeli postoji 75 kuća, onda u toj tabeli može biti najviše 25 stanova.
SQL:1999 – Tipovi podataka 11 PRILOG
Microsoft je u svet SQL ušao kupovinom licence od „Sybase”‐а, za osnovne blokove koji grade Microsoft‐ov sistem za upravljanje bazama podataka „ MS SQL Server”. Tako se 1988. godine zajedničkim naporima Sybase‐a, Ashton‐Tate‐a и Microsoft‐a došlo po prvi put do mogućnosti korišćenja relacionih baza podataka na PC platformama. Od 1993. godine Microsoft je započeo sa samostalnim razvijem ovog sistema. Osnovna preednost ovog sistema je jednostavnost u korišćenju i administriranju, što je inače glavni problem kod sistema istih namena drugih proizvođača (veliki stepen složenosti i veće cene). Još jedan od brojnih prednosti ovog Microsoft‐ovog sistema je skalabilnost.
U pogledu praktične primene, to bi značilo, na primer, da jedna firma koja poseduje izvesnu bazu podataka kreiranu u MS Access‐u, bez mnogo napora i ulaganja, može jednostavno da sve podatke iz MS Access‐a prebaci na SQL Server platformu, naravno ukoliko su u redovnom radu firme postavljeni veći zahtevi od uobičajenih, zarad napredovanja i proširivanja te firme.
12 SQL:1999 – Tipovi podataka LITERATURA [1] Great News, „The Relational Dtata Model is Dead!” [2] Pavlović‐Lažetić G., „Uvod u relacione baze podataka” [3] Eisenberg A., Melton J., „SQL:1999, formerly known as SQL3”