58
”DataLog & SQL” HOPL TKK, marraskuu ’09 Sami El-Mahgary Tietokannan hakukielet: esitelmä

”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

  • Upload
    lybao

  • View
    241

  • Download
    0

Embed Size (px)

Citation preview

Page 1: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

”DataLog & SQL”

HOPL TKK, marraskuu ’09

Sami El-Mahgary

Tietokannan hakukielet: esitelmä

Page 2: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

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

Page 3: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

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..

Page 4: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

4

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

Page 5: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

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

Page 6: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

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

Page 7: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

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)

Page 8: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

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).

Page 9: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

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

Page 10: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

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

Page 11: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

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?

Page 12: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

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

Page 13: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

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.

Page 14: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

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

Page 15: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

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.

Page 16: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

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ä.

   

Page 17: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

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

Page 18: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

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.

Page 19: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

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)

Page 20: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

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..

Page 21: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

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 )

Page 22: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

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 .

Page 23: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

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

Page 24: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

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;

Page 25: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

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

Page 26: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

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‘

Page 27: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

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.

Page 28: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

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!

Page 29: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

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‘

Page 30: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

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.

Page 31: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

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)

Page 32: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

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:

Page 33: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

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.

Page 34: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

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

Page 35: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

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 :

Page 36: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

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)

Page 37: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

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 )

Page 38: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

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).

Page 39: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

SQL Vs. Datalog

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

Kun rekursio sallitaan Datalogissa, ilmaisuvoima on suurempi kuin SQL.

39

Page 40: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

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!)

Page 41: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

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..

Page 42: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

42

Paradox sovelluskehitin (DOS-versio) sisälsi:

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

Page 43: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

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.

Page 44: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

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‘

Page 45: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

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

Page 46: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

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

Page 47: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

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

Page 48: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

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

Page 49: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

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;

Page 50: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

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.

Page 51: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

51

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

• Koodin luettavuus korkea.

Page 52: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

52

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

lause käsitellään tietokantapalvelimella).

Page 53: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

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

Page 54: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

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

Page 55: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

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

Page 56: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

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;

Page 57: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

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.

Page 58: ”DataLog & SQL” - cs.hut.fi · (deductive database) DATALOG: Lyhyt kehityshistoria 1/2. 6 ... jne. Ohjelma ... IBM julkaisee System alkanut vasta 1977! R:n

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