Omadus-väärtus (ehk rdf) andmebaasidest: erinevus redaktsioonide vahel
Resümee puudub |
|||
| 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: | ||
| 44. rida: | 44. rida: | ||
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, | 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. | kui nö traditsioonilises andmebaasis. | ||
Ülaltoodud inimeste tabeli info oleks seega esitatud niimoodi (tulba nimesid ei kirjutagi): | Ülaltoodud inimeste tabeli info oleks seega esitatud niimoodi (tulba nimesid ei kirjutagi): | ||
| 52. rida: | 52. rida: | ||
1,vanus,18,integer | 1,vanus,18,integer | ||
2,vanus,20,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 <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 | |||
3 | |||
4, | 1,amet,3,uri | ||
sees olev 3 ei ole mitte string ega täisarv, vaid ta viitab tabelis toodud objektile koodiga 3. | |||
1, | |||
Redaktsioon: 27. september 2006, kell 11:52
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 mitte string ega täisarv, vaid ta viitab tabelis toodud objektile koodiga 3.