Kapitel 6. Databaser

Linux er på grund af sin stabilitet et godt valg som databaseserver. Inden for databaser er de facto standarden sproget SQL, hvor data kan tilgås fra tekst-, grafisk-, og webbaserede løsninger samtidigt.

De to absolut mest brugte SQL-databaser på Linux er PostgreSQL og MySQL. Begge databaser udgives under en fri licens og er af høj teknisk kvalitet. For begge databaser gælder at du frit kan vælge de programmeringssprog og omgivelser du kender fra Linux. Perl, PHP, Python, C, Tcl/Tk, Java og foretrækker du shell-programmer, er det også en mulighed.

PostgreSQL er med her fordi den er meget avanceret og meget udbredt. PostgreSQL har SQL-funktionerne sub-select, stored procedures, transactions og ikke mindst brugerdefinerede objekter i databasen. MySQL er lidt hurtigere end PostgreSQL i mange situationer og er den mest udbredte af de to databaser.

De helt store kommercielle SQL-database producenter, Oracle, Sybase, Informix, IBM med DB2 og Inprise med InterBase er også kommet med en Linux-version af deres SQL-databaser. Programmeringsmulighederne er de samme, så det er nemt at flytte sit program den ene eller den anden vej, eller have et blandet miljø. Disse databaser på Linux anvendes i høj grad i produktionsmiljø, og i særdeleshed i udviklingsmiljø.

Anvender man Oracle og Linux sammen kan følgende artikler være meget interessante http://www.linuxjournal.com/article/5840 og http://www.linuxjournal.com/article/5841, idet de beskriver tuning af Linux så ydelsen nogle gange kan komme voldsomt i vejret.

Anvender du Microsoft Access databaser og overvejer at flytte dem til Linux, så er følgende artikel af interesse. http://www.nusphere.com/products/access2mysql.pdf.

6.1. SQL

SQL er en forkortelse for Structured Query Language og er et generelt sprog til at tilgå data i en SQL-database. De basale kommandoer i SQL er nemme at lære, så man kommer hurtigt igang med sin opgave. Har man kun een tabel at arbejde med, er SQL lige så nemt at bruge som andre konventionelle databaser, men når man ønsker at hente data fra flere tabeller samtidigt, så er der rigtigt mange fordele ved SQL. Har du prøvet at arbejde med ASCII filer der opdateres af flere personer samtidigt, så kender du til problemer som SQL-databaser løser for dig.

Et nemt forståeligt eksempel med to tabeller, eller 'relationelle tabeller' som det retteligt hedder, er en tabel med firmaer og en tabel med postnumre. For at sikre os at alle bynavne er stavet på samme måde, er postnummer og bynavn i en tabel for sig. I tabellen med firmaer er til gengæld kun angivet postnummeret og ikke bynavnet.

Skematisk kunne tabellerne se således ud

Tabel 6-1. Firma-tabel

FirmaNavn Vej PostNr
Vagabondos Tagensvej 100 2200
DKUUG Fruebjergvej 3 2100
Niels Bohr Institutet Blegdamsvej 17-21 2100

Tabel 6-2. Postnumre-tabel

PostNr ByNavn
2100 København Ø
2200 København N

Opgaven er nu at få en liste af alle firmaer med fuld adresse. Der er en relation i mellem de to tabeller ved feltet PostNr og SQL-kommandoen er så: SELECT FirmaNavn, Vej, Firma.PostNr, Bynavn FROM Firma, Postnumre WHERE Firma.postnr=Postnumre.PostNr Resultatet af ovenstående ser således ud:

Tabel 6-3. Søgeresultat: Firma+Postnumre

FirmaNavn Vej PostNr ByNavn
Vagabondos Tagensvej 100 2200 København N
DKUUG Fruebjergvej 3 2100 København Ø
Niels Bohr Institutet Blegdamsvej 17-21 2100 København Ø

Det der skete med SQL-kommandoen, var at der blev udført en 'join' imellem de to tabeller, således at postnumrene blev parret fra hver tabel.

Dette eksempel er selvfølgelig nemt at lave med ASCII tekst-filer, men prøv at forestil dig at der var tre eller flere tabeller.

Det vil være for vidt at komme ind på alle de SQL-kommandoer man kan lave i denne bog, da der findes mange gode bøger om emnet på dansk, og ikke mindst på engelsk. Er bøger uden for rækkevidde, er der god hjælp at hente på nettet. Se MySQL og PostgreSQL's hjælpesider.

Læsning af data er nok den mest brugte SQL-kommando, så den bliver lige beskrevet i korte træk. I sin simpleste form kan man skrive SELECT * FROM Firma, der giver alle felter fra tabellen 'Firma' i tilfældig rækkefølge. Er det kun 'FirmaNavn' og 'PostNr' man ønsker udskrevet, skrives SELECT FirmaNavn,PostNr FROM Firma. Data kommer i tilfældig rækkefølge, så der må lige sortering på SELECT FirmaNavn,PostNr FROM Firma ORDER BY PostNr.

Senere i bogen er nogle eksempler på hvordan man praktisk bruger SQL til noget der har med rigtige brugere at gøre. Til disse eksempler anvendes følgende liste af SQL-kommandoer som basis, og listen giver samtidigt de mest brugte SQL-kommandoer. Kommandoerne gør følgende:

CREATE TABLE linuxbog(kapitel INT, titel VARCHAR(40));
INSERT INTO linuxbog(kapitel, titel) VALUES(0, 'Indledning');
UPDATE linuxbog SET kapitel=1 WHERE kapitel=0;
SELECT * FROM linuxbog ORDER BY kapitel;
DELETE FROM linuxbog WHERE kapitel=1;
DROP TABLE linuxbog;

De viste SQL-kommandoer er helt basale og virker med alle SQL-databaser.

Læs mere om SQL-kommandoer på http://www.thomasheinen.de/courses/sql/A_SQL_Primer.htm, http://www.sqlcourse.com/ og http://riki-lb1.vet.ohio-state.edu/mqlin/computec/tutorials/SQLTutorial.htm.