Omadus-väärtus (ehk rdf) andmebaasidest: erinevus redaktsioonide vahel

Allikas: Lambda
Mine navigeerimisribale Mine otsikasti
Resümee puudub
 
(ei näidata sama kasutaja 13 vahepealset redaktsiooni)
5. rida: 5. rida:
Harilikes andmebaasides hoitakse andmeid enamasti mitmes tabelis: iga tabel sisaldab infot mingit sorti asjade kohta (inimesed,
Harilikes andmebaasides hoitakse andmeid enamasti mitmes tabelis: iga tabel sisaldab infot mingit sorti asjade kohta (inimesed,
firmad, autod jne jne). Iga tabel sisaldab hulga tulpasid: üks tulp sisaldab vastavat sorti asja mingit kindlat infot (nimi,
firmad, autod jne jne). Iga tabel sisaldab hulga tulpasid: üks tulp sisaldab vastavat sorti asja mingit kindlat infot (nimi,
registrikood, mark, hind vms).
registrikood, mark, hind vms). Tulpadel on reeglina kindel tüüp: string, integer või midagi muud.


Toome lihtsa näite kahe tabeliga, kusjuures kumbatki võib hoida lihtsalt ketta peal failina:  
Toome lihtsa näite kahe tabeliga, kusjuures kumbatki võib hoida lihtsalt ketta peal failina:  


isikud.csv:
inimesed.csv:


  ikood,eesnimi,pereknimi,vanus,pikkus
  kood,nimi,vanus,isikukood,pikkus
  10,Jaan,Mets,32,170.5 
  1,Arvo,18,,185
  50,Mihkel,Karu,21,180.4
  2,Jaan,20,38410122641,
  30,Anna Marie,Rebane,22,165
 
Selles inimeste tabelis on meil - näite mõttes - puudu esimese isiku isikukood ja teise pikkus (me lihtsalt ei tea neid andmeid)


ametid.csv:
ametid.csv:


   amet,isikukood,palk
   amet,palk,ikood
   koristaja,10,5000
   ehitaja,15000,1
   lektor,10,5000
   valvur,6000,1
   direktor,30,9000
   valvur,2000,2
 
Ametite tabelis on näite mõttes toodud kaks erinevat valvuri ametikohta, kumbki eri palgaga.
Kui tahad siduda eri tabeleid (näiteks, panna kirja, mis amet on mis inimesel) siis tehakse seda antud näites nii, et ametite tabelis on ikood tulbas kirjas
inimese kood isikute tabelis (ehk, "ikood" tulp ametite tabelis vastab "kood" tulbale isikute tabelis). Meie näites on Arvol seega kaks ametit, ning Jaanil
ainult üks, seegi madala palgaga.
 
== Omadus-väärtus (ehk rdf) andmebaaside idee ==
 
Traditsiooniline viis andmeid hoida on väga hea, kui on täpselt teada, mis sorti asjade kohta ja mis sorti infot me hoidma hakkame. Teisisõnu, saame tabelite
loetelu ja tulbad ette ära määrata, ning siis teha oma programmid täpselt nende tabelite ja nende tulpade jaoks.
 
Paraku ei ole see igas rakenduses võimalik. Eriti ebamugavaks läheb olukord, kui andmeid tuleb lugeda võrgus olevatest andmebaasidest,
mida teised arendajad vahel muudavad (lisavad sinna tulpasid jne): me ei saa täpselt ette ennustada, et mis tabelid mis tulpadega meile
kättesaadavad on.
 
Appi tuleb järgmine lihtne idee: hoiame kõiki oma objekte (inimesed, ametid, autod jne) ühesainsas nelja tulbaga tabelis:
 
  objekti kood  ,  objekti omaduse nimi ,  objekti omaduse väärtus,  objekti omaduse tüüp
 
Ehk, selle asemel, et iga omadust hoida eraldi tulbas, hoiame ühe objekti ühte omadust täpselt ühel real. Arusaadavalt on selliselt tehtud andmebaasis palju rohkem ridu,
kui nö traditsioonilises andmebaasis.
 
Ülaltoodud inimeste tabeli info oleks seega esitatud niimoodi (tulba nimesid ei kirjutagi):
 
  1,nimi,Arvo,string
  2,nimi,Jaan,string
  1,vanus,18,integer
  2,vanus,20,integer
  1,pikkus,185,integer
  2,isikukood,38410122641,string
 
Kui nüüd tahame lisaks tuua ülaltoodud ametite info, siis lisame samasse tabelisse järgmised read:
    
    
Esimene fail (isikud.csv) sisaldab infot inimeste kohta. Üks rida vastab ühele inimesele, iga tulp sisaldab konkreetset infot (eesnimi,pereknimi,vanus,pikkus).
  1,amet,3,uri
Samamoodi sisaldab teine tabel infot palkade kohta.
  1,amet,4,uri
  2,amet,5,uri
  3,nimi,ehitaja,string
  4,nimi,valvur,string
  5,nimi,valvur,string
  3,palk,15000,integer
  4,palk,6000,integer
  5,palk,2000,integer
 
Need uued read ütlevad, et meil on kolm objekti (numbritega 3,4,5), millel igalyhel on nimi ja palk, ning
need kolm objekti on seotud ülaltoodud isikutega: isikul 1 on ametiks objektid 3 ja 4, isikul 2 on ametiks
objekt 5.
 
Mis asi on <b>uri</b> tüüp esimeses kolmes reas? Uri on lühend fraasist "uniform resource indicator" ja nii
on kombeks nimetada viitasid rdf tabeli objektidele esimeses tulbas. Teisisõnu, esimese rea
 
  1,amet,3,uri
 
sees olev 3 ei ole sisuliselt mõeldud kui string või täisarv, vaid ta viitab tabelis toodud objektile koodiga 3.
 
== Info  eri failides: kuidas hakkama saada? ==
 
Rdf-i idee oli küll hoida kogu infot ühes tabelis, samas ei ole see alati praktiline ega ka võimalik. Kuidas kasutada mitut eri
rdf-faili nö ühise infobaasina? Idee on jällegi lihtne: kui viitame (tüüp nimega uri) objektile, mida kirjeldatakse teises failis, siis
ärme kirjuta lihtsalt objekti numbrit (näiteks 3,5,100 vms) vaid paneme numbri ette faili nime ja eraldajaks trellid.
 
Täiendamine meie eelnevat tabelit infoga selle kohta, et kes mida omab.  Osa infot (1 omab autot ja 2 omab maja)  hoiame samas failis, st lisame failile read:
 
  1,omab,7,uri
  2,omab,10,uri
  7,tyyp,auto,string
  7,mark,ford
  7,hind,200000,integer
  10,tyyp,maja,string
  10,hind,2000000,integer
 
Osa infot autode kohta olgu meil aga eraldi failis nimega <b>autod.csv</b>:
 
  1,tyyp,auto,string
  2,tyyp,auto,string
  1,mark,opel,string
  2,mark,cadillac,string
  1,hind,100000,integer
  2,hind,500000,integer
 
Selleks, et öelda, et isik 1 omab autode tabelis autot 2  ja isik 2 omab autot 1, lisame oma põhitabelisse read
 
  1,omab,autod.csv#2,uri
  2,omab,autod.csv#1,uri
 
 
Nagu seda teksti lugedes võid kahtlustada, on täiesti OK kasutada failide asemel võrgulehti, mis sisaldavad
rdf tabelit. Sellisel juhul kirjutatakse failinime asemel # märgi ette lihtsalt url, näiteks http://www.minusait.com/autod#121212
 
== Mida veel lugeda ==
 
Kui tunned rdf-i ideede vastu rohkem huvi, siis saad hea sissejuhatuse nendest
artiklitest:
 
* http://en.wikipedia.org/wiki/Resource_Description_Framework
* http://www.w3.org/TR/rdf-primer/
* http://en.wikipedia.org/wiki/Semantic_Web


Kui tahad siduda eri tabeleid (näiteks, panna kirja, mis amet on mis inimesel) siis tehakse seda antud näites nii, et ametite tabelis on isikukoodi tulbas kirjas
NB! Rdf-i igasugused lisakeerukused, xml süntaks jne jne <b>ei ole antud praktikumitöö teemaks!</b> ja nende artiklite lugemine ei aita kuidagi
inimese kood isikute tabelis (ehk, "isikukood" tulp ametite tabelis vastab "ikood" tulbale isikute tabelis).
kaasa praktikumitöö tegemisele: pigem võib see pea segamini ajada ja töö raskendada. Seega: loe lisaks kas omal riisikol või peale praktikumitöö valmimist!

Viimane redaktsioon: 26. september 2007, kell 12:03

Enne rdf baaside selgitamist kirjutan andmete hoidmisest nö traditsioonilistes andmebaasides.

Harilikud tabelid mitte-rdf baasides

Harilikes andmebaasides hoitakse andmeid enamasti mitmes tabelis: iga tabel sisaldab infot mingit sorti asjade kohta (inimesed, firmad, autod jne jne). Iga tabel sisaldab hulga tulpasid: üks tulp sisaldab vastavat sorti asja mingit kindlat infot (nimi, registrikood, mark, hind vms). Tulpadel on reeglina kindel tüüp: string, integer või midagi muud.

Toome lihtsa näite kahe tabeliga, kusjuures kumbatki võib hoida lihtsalt ketta peal failina:

inimesed.csv:

  kood,nimi,vanus,isikukood,pikkus
  1,Arvo,18,,185
  2,Jaan,20,38410122641,

Selles inimeste tabelis on meil - näite mõttes - puudu esimese isiku isikukood ja teise pikkus (me lihtsalt ei tea neid andmeid)

ametid.csv:

  amet,palk,ikood
  ehitaja,15000,1
  valvur,6000,1
  valvur,2000,2

Ametite tabelis on näite mõttes toodud kaks erinevat valvuri ametikohta, kumbki eri palgaga.

Kui tahad siduda eri tabeleid (näiteks, panna kirja, mis amet on mis inimesel) siis tehakse seda antud näites nii, et ametite tabelis on ikood tulbas kirjas inimese kood isikute tabelis (ehk, "ikood" tulp ametite tabelis vastab "kood" tulbale isikute tabelis). Meie näites on Arvol seega kaks ametit, ning Jaanil ainult üks, seegi madala palgaga.

Omadus-väärtus (ehk rdf) andmebaaside idee

Traditsiooniline viis andmeid hoida on väga hea, kui on täpselt teada, mis sorti asjade kohta ja mis sorti infot me hoidma hakkame. Teisisõnu, saame tabelite loetelu ja tulbad ette ära määrata, ning siis teha oma programmid täpselt nende tabelite ja nende tulpade jaoks.

Paraku ei ole see igas rakenduses võimalik. Eriti ebamugavaks läheb olukord, kui andmeid tuleb lugeda võrgus olevatest andmebaasidest, mida teised arendajad vahel muudavad (lisavad sinna tulpasid jne): me ei saa täpselt ette ennustada, et mis tabelid mis tulpadega meile kättesaadavad on.

Appi tuleb järgmine lihtne idee: hoiame kõiki oma objekte (inimesed, ametid, autod jne) ühesainsas nelja tulbaga tabelis:

 objekti kood  ,  objekti omaduse nimi ,  objekti omaduse väärtus,  objekti omaduse tüüp

Ehk, selle asemel, et iga omadust hoida eraldi tulbas, hoiame ühe objekti ühte omadust täpselt ühel real. Arusaadavalt on selliselt tehtud andmebaasis palju rohkem ridu, kui nö traditsioonilises andmebaasis.

Ülaltoodud inimeste tabeli info oleks seega esitatud niimoodi (tulba nimesid ei kirjutagi):

 1,nimi,Arvo,string
 2,nimi,Jaan,string
 1,vanus,18,integer
 2,vanus,20,integer
 1,pikkus,185,integer
 2,isikukood,38410122641,string

Kui nüüd tahame lisaks tuua ülaltoodud ametite info, siis lisame samasse tabelisse järgmised read:

 1,amet,3,uri
 1,amet,4,uri
 2,amet,5,uri
 3,nimi,ehitaja,string
 4,nimi,valvur,string
 5,nimi,valvur,string
 3,palk,15000,integer
 4,palk,6000,integer
 5,palk,2000,integer

Need uued read ütlevad, et meil on kolm objekti (numbritega 3,4,5), millel igalyhel on nimi ja palk, ning need kolm objekti on seotud ülaltoodud isikutega: isikul 1 on ametiks objektid 3 ja 4, isikul 2 on ametiks objekt 5.

Mis asi on uri tüüp esimeses kolmes reas? Uri on lühend fraasist "uniform resource indicator" ja nii on kombeks nimetada viitasid rdf tabeli objektidele esimeses tulbas. Teisisõnu, esimese rea

  1,amet,3,uri

sees olev 3 ei ole sisuliselt mõeldud kui string või täisarv, vaid ta viitab tabelis toodud objektile koodiga 3.

Info eri failides: kuidas hakkama saada?

Rdf-i idee oli küll hoida kogu infot ühes tabelis, samas ei ole see alati praktiline ega ka võimalik. Kuidas kasutada mitut eri rdf-faili nö ühise infobaasina? Idee on jällegi lihtne: kui viitame (tüüp nimega uri) objektile, mida kirjeldatakse teises failis, siis ärme kirjuta lihtsalt objekti numbrit (näiteks 3,5,100 vms) vaid paneme numbri ette faili nime ja eraldajaks trellid.

Täiendamine meie eelnevat tabelit infoga selle kohta, et kes mida omab. Osa infot (1 omab autot ja 2 omab maja) hoiame samas failis, st lisame failile read:

 1,omab,7,uri
 2,omab,10,uri
 7,tyyp,auto,string
 7,mark,ford
 7,hind,200000,integer
 10,tyyp,maja,string
 10,hind,2000000,integer 

Osa infot autode kohta olgu meil aga eraldi failis nimega autod.csv:

 1,tyyp,auto,string
 2,tyyp,auto,string
 1,mark,opel,string
 2,mark,cadillac,string
 1,hind,100000,integer
 2,hind,500000,integer
  

Selleks, et öelda, et isik 1 omab autode tabelis autot 2 ja isik 2 omab autot 1, lisame oma põhitabelisse read

  1,omab,autod.csv#2,uri
  2,omab,autod.csv#1,uri


Nagu seda teksti lugedes võid kahtlustada, on täiesti OK kasutada failide asemel võrgulehti, mis sisaldavad rdf tabelit. Sellisel juhul kirjutatakse failinime asemel # märgi ette lihtsalt url, näiteks http://www.minusait.com/autod#121212

Mida veel lugeda

Kui tunned rdf-i ideede vastu rohkem huvi, siis saad hea sissejuhatuse nendest artiklitest:

NB! Rdf-i igasugused lisakeerukused, xml süntaks jne jne ei ole antud praktikumitöö teemaks! ja nende artiklite lugemine ei aita kuidagi kaasa praktikumitöö tegemisele: pigem võib see pea segamini ajada ja töö raskendada. Seega: loe lisaks kas omal riisikol või peale praktikumitöö valmimist!