”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ......

Post on 20-Jul-2019

240 views 0 download

Transcript of ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ......

”DataLog & SQL”

HOPL TKK, marraskuu ’09

Sami El-Mahgary

Tietokannan hakukielet: esitelmä

2

• Osa I Lyhyt katsaus DATALOG:iin

• Osa II Katsaus SQL:n kehitykseen

Tietokantakehityskieliä:• Osa IIIA Katsaus Paradox

tietokantakieleen (4. GL)

• Osa IIIB Katsaus Delphiin

3

Kehitysvaihe Huomatuksia

2GL Assembler Ei enää käytössä

3GL Perinteiset algoritmiset/proseduraaliset kielet

C/C++, Java, Pascal, Python.

4GL Ylemmän tason ohjelmointikielet

Esim. SQL, Datalog, Focus, sekä tietokantasovelluskehittimet ja kyselykielet. Nopeuttavat ohjelmointia.5GL Ongelman

määrittelykielet (declarative prog. Languages)

Prolog, CLP(R) sekä OPS5(Asiantuntijajärjestelmät)

Entäpä nykyiset Visuaaliset sovelluskehittimet (Delphi, Visual Basic, Visual C++) ?

Luultavasti 4GL, jotkut voivat lajitella omaan luokkansa.

Osa I. DATALOG/SQL sijoittuminen..

4

5 GL joidenkin mielestä tarkoittaa ’luonnolisia kieliä’:

5

(vuosi) Kehitysvaihe Huomatuksia

(1973) Alain Colmerauer ja työryhmä julkaisevat Prologin raportin.

(1974) Robert Kowalski julkaisee paperin ”Predicate Logic as a Programming Language”

Oivallus, että logiikasta on ohjelmointikieleksi. Mukana myös A. Colmerauer:in ajatuksia.Logiikka + Kontrolli=Algoritmi

(1977) Käsitys logiikkaohjelmoinnin sekä tietokantojen yhdistämisestä syntyy kongressissa Ranskassa (Toulouse).

Hervé Gallaire, Jack Minker, Jean-Marie Nicolas järjestämä kongressi toteaa: logiikka & tietokanta ovat oma aihepiirinsä: käsitys päättellytietokannasta (deductive database)

DATALOG: Lyhyt kehityshistoria 1/2

6

(vuosi) Kehitysvaihe Huomatuksia

(1978) John Lloyd, Foundations of Logic Programming

Logiikkaohjelmoinnin merkkiteoksia.

(1978) H. Gallaire & J. Minker (eds.) , Logic & Databases

Tietokannan formalisointi logiikan puitteissa.

(1980-luvun puoliväli) DATALOG nimitys, peräisin tutkijaryhmältä

vertaa Wikipedia, jonka mukaan 1 hlö nimesi kielen.

(1989) Stefano Ceri et al, ”What you always wanted to know About Datalog” (Transct. in Knowledge Eng.)

Datalogia tutkittu laajasti v. 1985-1989, vakiintunut asema tutkijoiden keskuudessa.

DATALOG: Lyhyt kehityshistoria 2/2

Deklaratiivisen ohjelmoinnin etuja.

7

Ei varsinaista proseduuria, ei muistin-viittaustoimintoja, jne. Ohjelma yksinkertaistuu.

“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

- Tony Hoare (Turing palkinto v. 1980)

8

DATALOG: Viisi Faktaa • Hakukieli tietokantaan (query

language).

• Deklaratiivinen kieli (kuten Prolog ja SQL).

• Syntaksi on osajoukko Prologista .

• Datalog-tulkki osaa päätellä (ETEENPÄIN KETJUTUS) uusia faktoja lähtötiedoista.

• Ei käytännössä kaupallisia toteutuksia, tutkijoiden kielenä (toy language).

9

Perustuu logiikkaohjelmaan: kokoelma faktoja (facts, extentional database) sekä sääntöjä (rules).

Esim. Predikaatista: OnSuoritettavaEnnen (X,Y )

Luetaan ’X’ suoritetaan ennen ’Y’:tä.

• Parametrien määrä predikaatissa aina vakio (tässä 2).

• Muuttuja merkitään Isolla alkukirjaimella, vakiot pienellä.

• Predikaatti OnSuoritettavaEnnen vastaa tietokannan relaatiota.

Esimerkki säännöstä: Esitieto (X,Y ) :- OnSuoritettavaEnnen

(X,Y ) .

joka vastaa logiikassa merkintää: Esitieto (X,Y ) ← OnSuoritettavaEnnen

(X,Y ) .

DATALOGin perusteita

10

DATALOG OHJELMA (1/3)

Määritellään ohjelma, joka koostuu säännöistä. Rekursio OK.

Esitieto (X, Y ) :- OnSuoritettavaEnnen (X, Y ).

Esitieto(X, Y) :- OnSuoritettavaEnnen (X , Z ) ,

Esitieto(Z, Y).

Pilkkuerotin ’,’ ilmaisee JA-operaation.Lisäksi määritellään faktat (facts,

extentional database):

OnSuoritettavaEnnen (kie-98.7011, kie-98.7013 ) . //Fakta 1

OnSuoritettavaEnnen (kie-98.7013, kie-98.7015) . // Fakta 2

OnSuoritettavaEnnen (kie-98.7015, kie-98.7017) . // Fakta 3

11

kie-98.7011

kie-98.7013

kie-98.7015

kie-98.7017

DATALOG OHJELMA (2/3)

Kysely: Mitä vaaditaan esitietoina kurssille kie-98.7017?

DATALOG OHJELMA (3/3)

Annetaan tulkin käydä läpi säännöt kunnes ei enää uusia faktoja.

1.Kierros: Muuttujat X ja Y sitoutuvat (instantiation) kursseihin.

saadaan Esitieto{(kie-98.7011, kie-98.7013 ); (kie-98.7013, kie-98.7015) ; (kie-98.7015, kie-98.7017)};

2.Kierros : Esitieto saa uudet faktat: (kie-98.7011,

kie-98.7015) ; (kie-98.7013, kie-98.7017) ; ( sääntö nr 2)

3.Kierros : Esitieto saa uuden faktan: (kie-98.7011,kie-98.7017) kun yhdistetään (kie-98.7011, kie-98.7015) sekä (kie-98.7015, kie-98.7017)

3.Kierros: ei enää uusia faktoja, lopetetaan.

Iteraatioiden lkm riippu faktoista, ei voida päätellä kyselystä.

12

13

Cheap_car(Car) :- sells(CarShop1, Car, Price1), sells(CarShop2, Car, Price2) , Price1 < 5000 , Price2 < 5000, CarShop1 <> CarShop2.

DATALOG OHJELMA 1/1 ’Halvat Autot’..

sells(AutoTalonen, VW-Golf GS , 4570). √ √sells(AutoTalonen, VW-Golf GS , 4950) . √sells(AutoTalonen, Peugeot 207 , 5000) .sells(DasAutoHaus, VW-Golf GS, 4800) . √ √sells(Pikkuautot Oy, Peugeot 207, 4999) .√

Faktat, extensional database

Vastauksena olisi VW-Golf GS

ETEENPÄIN KETJUTUS: kokeillaan vaihtoehtoja kunnes kaikki Säännön alitavoitteet täyttyvät.

Datalog Vs. Prolog Datalog: ohjelman semantiikka perustuu

100% logiikkaan, sääntöjen järjestyksellä ei ole väliä. Eteenpäin-ketjutus (forward-chaining/bottom-up) eli annetuista faktoista ja säännöistä johdetaan uusia faktoja kunnes uusia faktoja ei enää voi johtaa (vrt. Taaksepäin ketjutus).

Päättelyjärjestystä ei voida hallita proseduraalisin keinoin (vrt. cut eli ! operaation avulla).

Vain yksinkertaisia muuttujiaa parametreina (Prologissa sallitaan Compound term). Datalog lähinnä kyselykieli, ei yleiskieli.

14

15

Datalog nyt ja myöhemmin..

Vaikutteita kaupalliseen kieleen : .QL (object-oriented query language) ilmestyi v. 2007.

Hajautetuissa järjestelmissä käyttöä laajennetulle Datalogille (Datalog with constraints), käytetty

autentikoinnissa (trust management).

   

Vaikutteita SQL-1999 standardiin, rekursio.

1616

Osa II. SQL:n perusteita 1/2

Relaatiotietokantojen haku- sekä käsittely kieli.

Perustuu ns. (turvalliseen) rivikalkyyliin, engl. safe tuple relational calculus.

Eli etsittäessä vastaus kysymykseen ketkä EIVÄT ole opiskelijoita,

tarkoittaa käytännössä ketkä henkilöistä EIVÄT kuulu opiskelijatauluun (eli kyselyt rajautuvat aina tietokannan tauluihin).

Turvallisuudesta johtuen ’universaali-kvanttori’ � operaatio ei ole sallittu, vaikkakin sallittu alkuperäisesssä SQUARE-kielessä.

   

17

Vastaavat loogiset predikaatit merkitään AND

OR sekä NOT . Haun perusmuoto: SELECT

<attribuutit> FROM <relaatiot (taulut)> WHERE <rajoitusehto>

Esimerkki: SELECT Student_ID, Student_Name

FROM Students WHERE Student_Major

= ‘Biology‘ SQL sidottu tietokantaan: yksittäistä

SQL-tulkkia ei saatavilla ( Datalog).

Käytännössä vain suuret (IBM,Oracle, MS) toteuttavat SQL:n sen standardin laajudessa.

Esim. suosittu mySQL toteutti VIEW toiminnon (virtuaalitaulu) vasta vuosien jälkeen.

SQL:n perusteita 2/2

18

SQL Kehityshistoria 1/2

(vuosi) Kehitysvaihe Huomatuksia

(1970) Tri E.F. Codd (IBM) julkaisee ”A Relational Model for Large Shared Data Banks”

Määrittelee relaatiomallin perusteet. Codd:ille AM. Turing palkinto v. 1981.

(1973) IBM:n ryhmä julkaisee kyselykielen SQUARE, tarkoitettu myös ei-ohjelmoijille.

SQUARE = Specifying Queries as Relational Expressions.

(1974) IBM:n System R kehitys alkaa, 1. SEQUEL-paperi ilmestyy

SEQUEL = Structured English Query Language

(1974) 1. Ingres prototyyppi (yliopisto)

QUEL-kyselykieli (ei standardia)

(1979) Larry Ellison julkaisee kaupallisen tietokantansa, Oracle V2

firma: Software Development Labs, alkanut vasta 1977!(1979) IBM julkaisee System

R:nvain viikkoja Oracle:n jälkeen

(1980) SEQUEL nimetään SQL:ksi

’SEQUEL’ jo varattu Englannissa.

19

(vuosi) Kehitysvaihe Huomatuksia

(1981)IBM julkaisee SQL/DS IBM:n 1.kaupallinen DB-tuote! (”mainframes”)

(1986) SQL:n 1. standardi (ANSI)

ISO-standardi v. 1987

(1992) Merkittävä standardi SQL-2

mm. NATURAL JOIN, ’Temp’-taulut.

(1999) standardi SQL 1999 (SQL-3)

mm. Herättimet (triggers), kontrollirakenteet, rekursio.

(2003) standardi SQL:2003 mm. XML-tuki.

(2008) Standardi SQL:2008 Pieniä parannuksia esim. TRUNCATE Table tyhjentää koko taulun nopeasti.

SQL:n Kehityshistoria (2/2)

20

* “in the summer of 1978, I got a phone call… from a guy named Larry Ellison, …he said he was the president of Software Development Laboratories, and they were developing an implementation of the SQL language”.

Miksi IBM myöhästyi… (1/2)

* “As you know, many papers came out of the System R project…describing the language …The project was not a secret and.., we’d been telling everybody about it that would listen. And one of the people that had listened …was Larry…he was interested in implementing the SQL language in the UNIX environment. IBM wasn’t interested in UNIX at all.” (PDP-11 platform)

Eräs SQL:n pääarkkitehteista muistelee..

21

Miksi IBM myöhästyi… (2/2)

* I told Larry that, unfortunately… we wouldn’t be able to exchange information other than in the public literature. But that didn’t slow down Software Development Laboratories. They released their implementation of SQL …it was the first commercial implementation of SQL to go on the market..”

* Larry's success had a ..beneficial impact on our research group, because …we finally got IBM’s attention for this technology. Here was an outside company that had beat us to the punch as far as releasing a commercial implementation of these ideas, which were based on Ted Codd’s concepts and our language coming out of the research division at IBM, and people were eating it up… They were paying money for it. That’s a good way to get IBM’s attention..”

Donald Chamberlain muistelee (2009 )

SQL: Taulujen käsittely

® Käytetään ns. Data Definition Language komentoja.

® Olettaen, että tietokanta on jo määritelty, voidaan määritellä uusi tyhjä taulurakenne komennolla CREATE TABLE .

® Aineistoa lisätään komennolla INSERT TABLE .

® Aineistoa muunnetaan komennolla UPDATE TABLE .

® Aineistoa poistetaan komennolla DELETE TABLE .

23

CREATE TABLE Transcript(Taken_ID Number Not Null,Course_ID Varchar2(9) Not Null,Student_ID Number Not Null,Teacher_ID Number Not Null,Course_Status Varchar2(3) Not Null,Semester_Taken Varchar2(9) Not

Null,Grade_Obtained Number Not Null,Extra_Info Varchar2(65) )

SQL: Taulujen generointi

24

SQL: Aineiston Lisäys• Komento INSERT lisää yhden

tietueen.• Lopuksi lisäykset tallennetaan

levylle.INSERT INTO Transcript VALUES(100, ‘ CS-102 ‘, 3270, 1 , ‘OK‘, ‘SPRING-09‘, ‘SP‘, 4, ‘‘));.....COMMIT;

25

SQL: Aineiston Haku (1/5)

Hakulauseissa (queries) tärkein ominaisuus on aineiston rajoittaminen, joten WHERE lausekkeista helposti pitkät.

SELECT S. Student_ID, S. Student_NameFROM Students S, Transcript TWHERE T.Student_ID = S.Student_IDAND T. Course_ID = ‘CS-101’

Varsinainen rajoitus

Taulujen liitos

SQL: Aineiston Haku (2/5)

Student_ID

Student_Name

3270 Adel

3270 Adel

3271 Jill

3272 Joseph

’Opiskelija Adel’ ilmestyy tuplana?!

Voi hämmentää käyttäjää, SQL sallii toisteiset arvot (bag-oriented, instead of set-oriented)Korjaantuu käyttämällä SELECT DISTINCT .. FROM

SELECT S. Student_ID, S. Student_NameFROM Students S, Transcripts TWHERE T . Student_ID = S. Student_IDAND T. Course_ID = ‘CS-101‘

27

SQL: Aineiston Haku (3/5)SELECT S. Student_ID, S.

Student_BirthDateFROM Students SWHERE S. Student_BirthDate < ALL(SELECT Student_Birthdate FROM

Students S2WHERE S2. Department = ‘Natural

Science’ )

Hakee opiskelijat, jotka ovat vanhempia kuin jokainen Luonnontieteiden opiskelija.

ALL ei siis itsessään palauta kaikkia opiskelijoita.

28

SQL: Aineiston Haku (4/5)Haetaan opiskelijat, jotka ovat suorittaneet kaikki Prof. ’Eleichen’:n (opettaja ID 3) opettamat kurssit. Ongelma: yleinen kysely, mutta

SQL:ssä ei suoraa Tukea ’kaikki’ operaattorille.SELECT DISTINCT Student_ID

FROM Transcripts T1WHERE NOT EXISTS ( SELECT * FROM Transcripts WHERE Teacher_ID = ‘3‘ AND Course_ID NOT

IN (SELECT Course_ID FROM Transcripts T2

WHERE T2.Student_ID = T1.Student_ID ))* Eli EI sellaista opiskelijaa, joka EI olisi suorittanut

jotakin opettajan (ID= 3) kursseista. Tuplanegaatio!

Aineiston Haku: SQUARE vs. SQL

29

S // muuttujien avulla taulu liitetään itseensä.

// (NAME , SAL , MGR ,DEPT)

// (’ANDERSON’, 32000, ’ JOHNSTON’,’SALES’)

// (’JOHNSTON ’, 55000, ’ BIGBOSS ’, ’SALES’)

// eli Andersonin esimies Johnston tienaa 55 000.

SELECT E2. SalaryFROM EMP E1, EMP E2 WHERE E1 .MGR

= E2.NAME AND E1. NAME = ‘ANDERSON‘

30

Ei vain rivitasolla vaan myös ryhmityksiä.. Ryhmitys (grouping) ja tietuiden/rivien yhdistäminen (aggregates) on tutkimusten mukaan joskus hankalaa ainakin ei-ohjelmoijille.

GROUP BY Muodostaa ryhmiä.

AVG, MIN, MAX, SUM ryhmien yhteenveto laskentaa varten.

31

Student_ID Dept Course_ID Credits

3270 French

CS-101 5

3270Comp.S

ci CS-101 5

3271Comp.

Sci CS-101 5

3271 Comp. Sci

CS-103 3

3272 Biology CS-101 5

3272 Biology CS-103 3

Oletus: aineisto sijaitsee (väliaikaisessa) taulussa ’T3’, jossa mm. Opiskelija 3270 on vaihtanut osastoa. Halutaan laskea montako opiskelijaa on suorittanut kunkin kurssin (sekä op:summan).

Ryhmityksiä.. esim. (1/4)

32

Ryhmityksiä .. esim. (2/4)

Course_ID Student_Count_Taken

Sum_of_Credits)

CS-101 3 15

CS-103 2 6

Tavoitteena siis saada seuraava tulos:

33

SELECT Course_ID, COUNT(Course_ID),

SUM (Credits) FROM T3GROUP BY Course_ID

Course_ID

Count (Course_ID)

Sum_of_Credits

CS-101 4 20

CS-103 2 6

Ryhmityksiä .. esim. (3/4) Kun kokeillaan seuraavaa:

saadaankin alla oleva, ei-haluttu tulos.

34

Oikea SQL-kysely olisi:

SELECT Course_ID, COUNT( DISTINCT Student_ID),

COUNT( DISTINCT Student_ID), * Credits

FROM T3GROUP BY Course_ID

Ryhmityksiä .. esim. (4/4)

Eli olisi mm. osattava :•Käyttää DISTINCT :iä•Sijoitettava laskukaava

35

SQL: Aineiston Haku (5/5 )

SELECT T1.Student_ID, COUNT(t.course_id) FROM Transcript T1

WHERE T1.Teacher_ID = ‘3‘ // oikea Proffa

GROUP BY student_idHAVINGCOUNT(T1. Course_ID)= (SELECT COUNT(DISTINCT T2.

Course_ID) FROM Transcript T2 WHERE T2. Teacher_ID = ‘3‘ )* Sellaiset opiskelijat jotka ovat suorittaneet

Prof nro ’3’ kursseja yhtä monta kuin kyseinen opettaja opettaa eri kursseja.

Helpompi esitystapa aikaisempaan opettaja kyselyyn :

36

HIEMAN SQL KRITIIKKIÄ… (1/2)Sama kysely (ketkä saaneet arvosanan

’5’ monella eri tavalla esitettynä (peräti 7!, tässä muutamia):

(1) SELECT T. Student_ID FROM Transcripts T, Students S,

WHERE T.Student_ID = S.Student_ID T AND T.Course_Grade = 5(2) SELECT Student_ID FROM Students S

WHERE Student_ID IN (SELECT Student_ID FROM Transcripts

WHERE T.Course_Grade = 5)(3) SELECT Student_ID FROM Students S WHERE = ANY (SELECT Student_ID FROM

Transcripts WHERE Course_Grade = 5)

37

HIEMAN SQL Kritiikkiä… (2/2)(4) SELECT Student_ID FROM Students S

WHERE 5 IN (SELECT Course_Grade FROM Transcript T

WHERE = T.Student_ID = S.Student_ID)Yllä: ’Muuttuja’ S näkyvyysalue ulottuu siis sisäiseen SELECT -lauseeseen

(5) SELECT Student_ID FROM Students S WHERE

EXISTS (SELECT * FROM Transcript T WHERE = T.Student_ID = S.Student_ID AND

Course_Grade = 5 )(6) SELECT Student_ID FROM Students S WHERE

0 < (SELECT COUNT(*) FROM Transcript T WHERE = T.Student_ID = S.Student_ID AND

Course_Grade = 5 )

38

SQL: Jotain positiivistakin… Yksi harvoista ennen v. 1975

kehitetyistä kielistä, joka silti voimissaan.

Laajennettavissa mm. sulautetun SQL:n avulla (embedded SQL). Esim. IBM:llä ja Oracle:lla C/C++ tuki. Tällä hetkellä mySQL ei tue sulautettua SQL:ää.

Kielen luonne antaa ohjelmoijan keskittyä haluttuun tulokseen.

Toiminut perusteena mm. OQL-kielellle (Object Query Language) oliopohjaisissa tietokannoissa sekä FSQL –kielelle (Fuzzy SQL).

SQL Vs. Datalog

Datalog vastaa SQL:n SELECT-FROM-WHERE kyselyitä ilman ryhmityksiä/yhteenvetoja.

Kun rekursio sallitaan Datalogissa, ilmaisuvoima on suurempi kuin SQL.

39

40

Osa IIIA. Tietokantakehityspaketit, 4GL (erityisesti 1985-1995).

® Tunnetuimmat dBase ja Paradox myöhemin mm. FoxPro. Tunnetaan nimellä 4GL. (4th Generation Languages)

® Sisältävät relaatiotyyppisen tietokannan pohjautuen tiedostopalvelimeen (fileserver technology)

® Sisältävät ohjelmointikielen sekä laajan joukon komentoja data-aineiston käsittelyyn (SQL ei välttämättä tuettu!)

41

Paradox:in (DOS) kehitys(vuosi) Kehitysvaihe Huomatuksia

(1980) Ashton-Tate julkistaa W. Ratliff:in kehittämän dBase 2.0

PC:t saavat oman tietokantansa, ei varsinaisesti relaatiokanta.

(1985) Paradox 1.0 (DOS), Dr R.Shostak & Dr R.Schwartz

Hieno QBE (Query-by-Example) kielen toteutus PC-lle.

(1987) Paradox 2.0 DOS julkistetaan

Monikäyttäjätuki (LAN), Borland ostaa tuotteen

(1993) Paradox 1.0 (Windows)

Parhaimmillaan Borland:illa 85% PC:n tietokantamarkkinoista(1995) Delphi 1.0

(Windows) uusi tuote, korjaa PW:n virheetLisäksi: TurboPAL(ShengLabs), kääntäjä Paradox DOS:ille.

Microsoft liittää Access-tuotteensa osaksi Office pakettia, kaikki muut PC tietokantapaketit häviävät..

42

Paradox sovelluskehitin (DOS-versio) sisälsi:

•QueryByExample (hyvä toteutus, mm. every, only tuki).•Ohjelmointiympäristön (mm. PAL).•Paradox-tietokannan

PAL: Paradox Application Language 1/2

43

Tulkattava kieli laajalla komentopohjalla.

V. 1990 InfoWorld antoi PAL osuudelle arvosanan ’erinomainen’ (8.loka 1990)

Normaalit kontrollirakenteet.

Sisennyksillä ei merkitystä.

Lisäksi runsaasti komentoja/funktioita erityisesti taulujen käsittelyyn.

44

PAL: Paradox Application Language 2/2

PAL kuuluu ryhmään 4GL koska: sisältää ’makrokomentoja’, jotka säästävät koodin kirjoitusta.

Esimerkiksi komento REPORT T3 tulostaisi T3 väliaikaistaulusta kirjallisen raportin.

Kuitenkin ei-systemaattinen, SQL:n puute korvattava esim. komentosarjalla:

Menu {Ask} Select {Students} Check

Moveto [Dept] Typein “Biology” Do_It!

joka vastaa SQL-kyselyä:SELECT * FROM Students WHERE Dept

=‘Biology‘

45

PAL Esimerkki 1/2

Esimerkki kuvitteelliesta ongelmasta:Samaan kenttään tallennettu virheellisesti

sekä Suku että –etunimi, (esim. ’Wiren, Ville’) erotellaan ne omiin kenttiinsä.

EDIT “Students“ ; taulu tuodaan työtilaan, lukitaan.

MOVE [Name] ; siirrytäään kenttään ’Name’

; ------------------------------------------------------------; -erotellaan sukunimi etunimi, oletuksena; että tieto muotoa ’Sukunimi, Etunimi’ separate_names ; kutsutaan

aliohjelmaaDo_It! ; muutokset levylle

46

PROC separate_names ()PRIVATE last, first ; - ’automaattinen’ tyypitys; ------------------------------------------------------------------; SCAN aloittaa ensimmäisestä tietueesta.; MATCH erottaa lainausmerkeissä olevan stringin. SCAN FOR MATCH([],”.., ..” , last , first ) ; [Last_Name] = last [First_Name] = first ; talleta etunimi kenttäänENDSCAN ; SCAN-silmukka ulottuu tähänENDPROC

Miltäköhän tämä näyttäisi nykypäivän Delphillä?

PAL esimerkki 2/2

47

PROCEDURE separate_names; //Var st1, last, first : ShortString; nr_rows, i:Integer;{-- Students_tbl on komponentti , viittaa --} {-- opiskelijatauluun eli lyhennys --}{--- merkinnästä Students_tbl.RecordCount --} With Students_tbl Do Begin nr_rows := RecordCount ; // rivien kokonaismäärä Edit; // muokkaustila

Vastaava Delphi esim. 1/3

48

{-- aloita ensimmäisestä tietuuesta, lue kenttä --} First; FOR i := 1 To nr_rows Do Begin (* kaikki rivit läpi *) st1 := FieldByName(“Name”).AsString ; // oma kirjastofunktio eroittelee suku ja etunimen my_match_STRUTLS (st1, last , first ) ; FieldByName(“Last_Name”) .AsString := last ; FieldByName(“First_Name”) .AsString := first ; Next; // seuraava rivi End; END

Vastaava Delphi esim. 2/3

49

Vastaava Delphi esim. 3/3

Kutsutaan aliohjelmaa:separate_names;TryTry Students_tbl.Post ; // ’kommitoidaan’ Except on E: Exception Do // virheen hallinta ShowMessage(E.ClassName + ‘error found with message ’ + E.Message); End;Finally; // taulu suljettava joka tapauksessa, virhe tai ei. Students_tbl.Close;End;

50

DELPHI: Visuaalinen ohjelmointiväline tietokantasovelluksille.

Delphin pääsuunnittelijana Anders Hejlsberg (Tanska), joka kehitti myöhemmin C# kielen Microsoftilla.

Olio-ohjelmointia sekä SQL-tuki lähes kaikkiin tietokantoihin (mySQL, Oracle).

Lomakepohjainen ja tapahtumaohjattu. Tapahtumia paitsi lomakkeille, myös tietokannan tauluille (esim. OnNewRecord, OnFieldModified).

Laajennettavuus: valmis koodi taltioidaan paketeiksi (packages). Joko visuaalisia/puhtaasti proseduraalisia.

51

Katsaus Delphi ohjelmointiin 1/2• Begin, End kirjoitus ei enää työlästä..(editori)

• Koodin luettavuus korkea.

52

Katsaus Delphi ohjelmointiin 2/2Oliopohjaista koodia, jossa SQL-tuki (SQL:n

lause käsitellään tietokantapalvelimella).

53

(vuosi) Kehitysvaihe Huomatuksia

(1970) Pascal 1.toteutus julki, alustana CDC-mainframe . (vrt. C-kieli julki n. V. 1972)

N Wirth (Zürichin korkeakoulu)

(1973) Multum Pascal julki Skotlannissa (U. Of Glasgow)

Ensim. 16-bit toteutus?Tavoite: tehdä Pascalista systeemikieli.

(1977) Pascal/R julki Perinteistä Pascalia laajennettu taulu tyypillä (type relation).

(1982) Pascal:ista ISO standardi

Anders Hejlsberg kehittää oman nopean kääntäjänsä Pascalille.

(1983) Turbo Pascal ilmestyy

Borland ostaa tuotteen Hejlsbergiltä.

Lyhyt Delphi:n kehityshistoria 1/2

54

(vuosi) Kehitysvaihe Huomatuksia

(1989) Turbo Pascal 5.5 ilmestyy

Olio tuki, kieltä kutsutaan myös ’Object Pascal’, myös Mac:ille.(1995) Borland

julkistaa Delphi 1.0Ympäristönä 16-bittinen Windows

(1997) C++ Builder ilmestyy, Delphin pääarkitehteja siirtyy Microsoftille.

Borland väittää MS:n tuotetta J++ ”Delphi for Javaksi”.

(2001) Kylix ilmestyy Delphi Linux ympäristöön

(2008) Delphi 2009 ilmestyy. Pascaline kieli julki

Unicode tuki Delphille. Pascaline yhteensopiva Pascal, lisänä mm. oliot vrt. C# vastine C:lle.(2009) Delphi 2010

ilmestyy

Lyhyt Delphi:n kehityshistoria 2/2

55

Vertailu, Datalog, SQL, Pascal, Delphi (1/2)Lasketaan tietyn opiskelijan keskiarvo kun

tiedetään arvosanojen summa ja kurssien lkm.

Compute_GPA(SumGrades , NrCourses , GPA) :- GPA = SumGrades / NrCourses.

DATALOG (olettaen että jakolasku tuettu)

SELECT SumGrades / NrCourses FROM Transcript

WHERE Student_ID = ‘55075B’

SQL

56

Vertailu, Datalog, SQL, Pascal, Delphi (2/2)

Pascal/Delphi

Function Compute_GPA (SumGrades:Real;NrCourses :

Integer) :Real;BEGIN Compute_GPA := SumGrades Real / NrCourses ;END;Delphi Function Compute_GPA (Const

SumGrades:Real ; Const NrCourses : Integer) :Real;BEGIN Result := SumGrades Real / NrCourses ;END;

5757

Lähteitä DATALOG:*Grigoris Karvounarakis, DATALOG, Univ. Of

Pennsylvania.* Jack Minker, Invited Keynote: Logic and Databases: A

20 Year Retrospective, Workshop on Logic in Databases, San Miniate, Italy, 1996.

* GNU Datalog tulkki: (kirjoitettu Lua:lla!) http://

www.ccs.neu.edu/home/ramsdelltools/datalog/data.html

* S Constantini, Datalog, Maggioli Informatica. www.cs.unb.ca/~boley/cs6795swt/datalog_Stefania_Constantini_slides.pdf

* S Ceri, G Gottlob, L Tanca, What You Always Wanted to Know About Datalog (and Never Dared to Ask), IEEE Transactions on Knowledge & Data Eng, Vol. 1, March 1989, pp. 146-166.

* J Eder, Logic and Databases, University of Klagenfurt, Austria.

* N Memon, Enhanced Data Models for Advanced Applications.

58

Lähteitä SQL:

*Claudio Fratarcangeli, Technique for Universal Quantification in SQL,Sigmod, Vol. 20, 1991.

*Fabien Pascal, SQL and Relational Basics, 1990.

* RF Boyce, DD Chamberlin, MM Hammer, WK King III, Specifying Queries as Relational Expressions, IBM Thomas Watson Research Center, 1973. (SQUARE Kieli)

* Oral History of Donald Chamberlain, Computer History Museum, July 21, 2009, California.

* RDMBS Workshop: Technology through 1983, Recorded 2007, CA.

* http://wapedia.mobi/en/SEQUEL

• http://wapedia.mobi/en/SEQUEL