Geplaatst op: 27-4-2002 Aantal keer bekeken: 98071 Relationele Databases
Bij "Databases deel 2" gaan we het hebben over relationele databases.
Ik zal het begrip uitleggen met behulp van een voorbeeld.
Stel je voor dat je een website moet maken voor een bedrijf dat online computers
verkoopt. Welke gegevens moeten er dan minimaal in de database worden opgeslagen?
De gegevens van de klant en de computer die gekocht is. Dit kan er als volgt
uitzien:
Tabel : Verkoop
ID
Datum
Naam
Adres
Postcode
Woonplaats
Computer
Geheugen
Prijs
1
26-04
Jan
Straat 1
1111AB
Utrecht
Pentium 4 4 ghz.
3 Gb
€ 1000
2
12-05
Jan
Straat 1
1111AB
Utrecht
Pentium 4 5 ghz.
4 Gb
€ 2000
3
13-06
Jan
Straat 1
1111AB
Utrecht
Pentium 4 2 ghz.
1 Gb
€ 900
4
13-06
Piet
Laan 8
1234XU
A'dam
Pentium 4 2 ghz.
1 Gb
€ 2000
5
14-06
Klaas
Laantje 16
4312DF
A'dam
Pentium 4 4 ghz.
3 Gb
€ 1000
Als je kijkt naar het grijze vak, dan staat Jan er 3 keer in. Stel je voor
dat Jan nog 100 computers koopt. Dan heb je een tabel vol met de gegevens van
Jan. Stel je voor dat Jan gaat verhuizen. Je kan dan alle records veranderen
die van Jan zijn. Zou het niet veel mooier zijn als je de adresgegevens van
Jan in een nieuwe tabel kan plaatsen en dan een koppeling maken tussen deze
tabel en de tabel met adresgegevens. Op deze manier hoef je klant "Jan"
maar één keer in te vullen. Ook wanneer je iets moet wijzigen
in de gegevens van Jan, is dat in één keer gedaan. Er is in deze
tabel sprake van redundantie. Dit zal er als volgt uitzien:
Tabel 1: Klanten
Klant_id
Naam
Adres
Postcode
Woonplaats
1
Jan
Straat 1
1111AB
Utrecht
2
Piet
Laan 8
1234XU
A'dam
3
Klaas
Laantje 16
4312DF
A'dam
Tabel 2: Verkoop
ID
Datum
Klant-id
Computer
Geheugen
Prijs
1
26-04
1
Pentium 4 4 ghz.
3 Gb
€ 1000
2
12-05
1
Pentium 4 5 ghz.
4 Gb
€ 2000
3
13-06
1
Pentium 4 2 ghz.
1 Gb
€ 900
4
13-06
2
Pentium 4 2 ghz.
1 Gb
€ 2000
5
14-06
3
Pentium 4 4 ghz.
3 Gb
€ 1000
In de bovenstaande tabellen is al duidelijk een scheiding te zien tussen verkopen
en klanten. De verkoop tabel is nu een stuk kleiner geworden. Nu kan elke keer
wanneer Jan iets koopt alleen zijn "klant_id" nummer worden ingevuld.
We kunnen nog een stuk verder gaan en ook de computers in een aparte tabel plaatsen.
Nu krijgen we de volgende tabellen:
Tabel 1: Klanten
Klant_id
Naam
Adres
Postcode
Woonplaats
1
Jan
Straat 1
1111AB
Utrecht
2
Piet
Laan 8
1234XU
A'dam
3
Klaas
Laantje 16
4312DF
A'dam
Tabel 2: Computers
Computer_id
Computer
Geheugen
Prijs
1
Pentium 4 - 4 ghz.
3 Gb
€ 1000
2
Pentium 4 - 5 ghz.
4 Gb
€ 2000
3
Pentium 4 - 2 ghz.
1 Gb
€ 900
4
Pentium 4 - 2 ghz.
1 Gb
€ 2000
Tabel 3: Verkoop
verkoop_id
Datum
Klant-id
Computer_id
1
26-04
1
1
2
12-05
1
2
3
13-06
1
3
4
13-06
2
4
5
14-06
3
1
Nu hebben we drie tabellen waarbij alle gegevens die bij elkaar horen in een
tabel staan. Er zullen op deze manier geen gegevens dubbel in de database komen
te staan. Er is dus op deze manier GEEN sprake meer van redundantie.
Het verdelen van de gegevens over verschillende tabellen om er voor te zorgen
dat er geen dubbele gegevens in staan heet "Normaliseren".
De tabellen "klanten" en "computers" worden de "verkoop"
tabel gekoppeld met het computer_id en klant_id veld (Uitleg hierover in het
volgende hoofdstuk). Dit is aangegeven met de kleuren. Normaal zullen de tabellen
een stuk uitgebreider zijn, maar voor dit voorbeeld heb ik ze compact gehouden.
Wanneer de tabel op de bovenstaande manier is gemaakt, dan is er sprake
van een relationele database.
Als voorbeeld de les over relationele databases. In het voorbeeld is er inderdaad geen sprake meer van redundantie.
Echter, ik ben op zoek naar een methode om per klant slecht één record weer te geven, met bijvoorbeeld de laatste aankoop uit de tabel verkoop. Ik ben er geruime tijd bezig geweest, maar in de uitkomst worden steeds alle records gepresenteerd.
ik ben bezig met het bouwen van een database waaruit klanten hun eigen gegevens kunnen halen. Deze gegevens dienen te worden verschaft via een asp-website.
Het lukt me tot zover om een relationele database te bouwen die te benaderen is via een acces formulier om zo de diverse fiterinstellingen te doen en de bijbehorende gegevens op te vragen.
Nu wil ik het volgende
1 De gegevens dienen opgevraagd te kunnen worden via een data acces page (acces optie!) andere oplossingen zijn ook welkom. Dit lukt alleen indien ik de data acces page gebruik binnen acces, via de explorer niet.
2 Ik wil authorisatie implementeren. Iedere gebruiker kan enkel zijn of haar gegevens oproepen... dus beveiliging ip record niveau zeg maar. Is dit mogelijk binnen de opties die acces 2002 biedt? (ik had bedacht om een extra tabel toe te voegen met een username/wachtwoord combinatie, die vervolgens weer een relatie heeft met de tabel waarin de gegevens staan van deze username?... ik twijfel alleen over het feit of dit secure genoeg is.
Ik zie dat je iest over SQL verteld, ik heb een vraag. ik wil twee velden van elkaar aftrekken in query als het volgende"[qrySubtotalen_Bijschrijven].[Toataal_Bijgeschreven]-[qrySubtotalen_Afschrijven].[Toataal_Afgeschreven] AS TotaalVoorraad", als de totaal afgeschreven in de tabel niet gevuld is wordt de totaal niet getoond. terwij in de standaar waarde van het veld(in de table) wel een 0 heb. ik zal je dankbaar zijn als je mij hier mee kan helpen.