Databaser
En database er et rimelig kendt ord, for et sted man gemmer en masse oplysninger.
Dog er der en langt mere præcis forklaring hvad det er.
En database er i alt sin enkelhed et program, der danner en abstraktion over det normale
filsystem. Denne abstraktion, tager sig så af at håndtere og gemme data på en fornuftig facon.
Så dataene er lyn hurtige at tilgå og ændre i, uden lange ventetider.
Der er sågår nogle databaser, der har sit helt eget filsystem som så derved helt kan bestemme
hvordan den vil lagre alle dens data, på de rå harddiske.
Mere i detaljer
I daglig tale siger man ja vi har en database, der gemmer alle vores oplysninger, men det er faktisk
en forkert talemåde. Man burde siger ja vi har en host(en PC stor som lille), hvorpå vi har en server
kørende (server = et program der lytter efter forespørgsler fra en anden maskine). Et server program
findes i mange typer fx en webserver, ftpserver (file transfer server) eller ja en database server.
En database server
Er et program som der lytter efter forespørgsler fra andre maskiner. Disse kan være forespørgsler om
at hente eller gemme informationer.
Typisk er data i langt de fleste kendte databaser som Access,Oracle, Microsoft SQL Server og MySQL organiseret
i tabbeller med relationer imellem. Disse er kendt som relationelle databaser.
Tabeller er typisk organiseret i en form for gruppe - en gruppe kaldes med et populært ord for en
database! Husk dette! En database er altså en samling af tabeller. Så en database omtales altså både
som et program der lytter efter forespørgsler på at gemme eller hente data ud, eller som en samling af
tabeller inde i selve server programmet.
Til alle relationelle databaser kan man benytte sig af SQL Sproget = Structured Quary Language
Dette er et slags sprog så man kan snakke med databasen. Ved hjælp af SQL, får man mulighed for at
forespørge på selv meget komplekse udtræk. Fx et eksemple hevet ud af ærmet. Giv mig alle mænd i alderen
mellem 24 og 66, som har brunt eller sort hård... som køre i en bil fra mellem 1998 og 2003 og som har fået
skiftet lydpotte indenfor de sidste tre år... hvis vi siger at den slags oplysninger lå i en database. Ville
en database relativt hurtigt finde resultatet på denne mærkelige nok for os mennesker ret kompliserede
forespørgsel. Det kan være for os mennesker ret fantastisk hvilket datamængder en database kan æde sig igennem.
SQL Sproget
For at skabe en tabel, skal man skrive følgende SQL
create table [Tabelnavn](kollonnenavn1 datatype, kollonnenavn2...) fx:
create table Bil(mærke varchar(20), pris int)
For at insætte i en tabel skrives følgende:
insert into [tabelnavn]([kollonne navne man ønsker at indsætte i - adskildt af kommaer]) values ([aktuelle værdier man vil indsætte - adskildt af kommaer])
fx: insert into CPRTabel(cprnummer, navn) values ('24121434-1234', 'itpedersen')
insætter en række i tabellen/skemaet CPRTabel.
For at udvælge rækker fra en tabel:
select [kollonner] from [tabel] where [betingelse]
fx select navn from CPRTabel where cprnummer = '24121434-1234'
Denne sætning returnere navnet på personen med det gældende cpr nummer
For at opdatere en række:
UPDATE [tabel] SET kollonne = nyVærdi WHERE [Kollonne] = 2 fx
For at slette en række:
delete from [Tabel] where [Kollonne] = 2 fx
For at slette en tabel:
drop [table]
SQL UNION
UNION bruges i sql sammenhæng, når man har flere sql forespørgsler, som man gerne vil have smeltet sammen,
men hvor alle resultater er unikke.
Fx hvis nu man har to tabeller der hedder Mænd og Kvinder i en klub.
HVis man så gerne vil have alle deres cpr numre fx.
Så vil man skrive:
SELECT CPRNUMMER FROM MÆND UNION SELECT CPRNUMMER FROM KVINDER
Så får man alle cpr numre i de to tabeller, default er alle cprnumrene unikke. Hvis man ikke ønsker det
skriver man
SELECT CPRNUMMER FROM MÆND UNION ALL SELECT CPRNUMMER FROM KVINDER
SQL JOIN
Forestil dig to tabeller Biler(id,mærke,navn) og Nation(fk_id, nationalitet).
Disse tabeller er fyldt med biler og hvor hver bil hat tillknytet en nation.
Enkelte biler er ikke tilknyttet. Og enkelte nationer står i listen, men
disse har ingen tilknytning.
Husk join er det samme som inner join
Brug outer join hvis der skal være ikke matchene rækker.
Vil man nu have en liste over alle biler med bilernes nation skriver man:
select id,mærke,navn,nationalitet from Bil join Nation on Bil.id = Nation.fk_id
Hvis man ønsker at se de Biler der ikke har en nationalitet med i tabellen
med hele resultatet, så skriv left join.
Hvis du ønsker at se de nationaliteter der ikke har nogen biler tilknyttet,
skriv da right join.
Ønsker man at smelte nogle af rækkerne sammen, fordi de høre sammen, fx
hvad er den samlede pris på alle bilerne af mærket toyota. Her kan man fx
bruge SUM(PRIS) men gør man dette på et felt(kolonne), skal man huske til sidst
at lave en group by på: mærke. Så man kan se hvilken værdi man vil sammensmelte.
fx
select mærke, navn, SUM(pris) from Bil group by mærke
Vil man sortere rækkerne ud fra en kolonne kan man lave en order by. Fx
select mærke,navn from Bil order by mærke asc (eller desc)
Se næste menupunkt for en nærmere info omkring hver database.
Hvordan kontakter jeg en database.
Først skal databasen installeres og der skal data i den.
Database Connector
Derpå skal der være en connector til den pågældende database, disse
connectorer kan skaffes på database producentens hjemmeside. Under
connectorer, disse fåes til stort set alle databaser og programmerings
sprog.
Tilgå databsaen
Databaser tilgåes ved en URL, fx http://103.54.34.10 også en port fx port 7000.
Når man har en connector og en database at tilgå, skal man snakke med sin database server.
Dette gøres ved hjælp af et specielt sprog ved navn SQL.
Det foregår ved at man sender små tekst strenge til sin database connector, denne returnere
så resultatet, typisk i et eller andet form for Resultat sæt, på engelst Resultset.
En database har set fra oven af og ned, en helt masse database instanser - en instans kalder man typisk den
aktuelle database. Den aktuelle database består af en helt række skemaer, hvor hvert skema selvfølgelig har kolonner og rækker. Det ses hurtigt at en database kan holder styr på mange data. Det er ikke udsædvanligt at der i en aktuel database er mellem 100-800 tabeller.
Schema - Skema'er
Hvem må tilgå tabeller...