Database voor een beginner

Status
Niet open voor verdere reacties.

Arrosje

Nieuwe gebruiker
Lid geworden
16 jan 2011
Berichten
2
Hallo,

Ik ben een beginnend accesgebruiker. Ik vind het leuk om zulke programma's op eigen houtje onder de knie te krijgen, maar ik moet zeggen dat het nog niet volledig gaat. Ik hoop dat iemand mij op weg kan helpen.

Ik wil een database maken voor mijn (nog te starten) onderneming. Hierin wil ik het volgende kunnen doen. Ik wil graag overzichtelijk krijgen welke potentiële afnemers zich hebben ingeschreven bij mijn bedrijf. Deze mensen kunnen zich inschrijven voor bepaalde categorieën, bijvoorbeeld elektronica, cosmetica of food. Ik heb een tabel gemaakt met daarin de categorieën. In een andere tabel heb ik de personen met alle gegevens gezet. Nu wil ik graag bijvoorbeeld de categorie cosmetica kunnen selecteren en dat ik dan alle personen in die categorie eruit krijg met alle bijbehorende gegevens. ik snap alleen niks van het maken van de query's. Ik zie vaak de link niet. Is er iemand die mij kan uitleggen hoe ik kan zien welke kolommen ik uit de verschillende tabellen moet koppelen.

Alvast bedankt,
Arjen
 
Ik kan u enkel het volgende uitleggen.

Je hebt in totaal voor uw vraag 3 tabellen nodig, in de veronderstelling dat een klant zich kan inschrijven voor meerdere categorieën.

  • Klant
  • Klanten-categorie
  • Categorie

In uw tabel klant zitten alle klantgegevens met als primaire sleutel uw klant_id.

In uw tabel categorie zitten alle categorieën met als primaire sleutel uw categorie_id.

Als laatste heb je uw tabel klanten-categorie. Hierin zit bijvoorbeeld klant_id = 1, Jos.
Jos heeft zich ingeschreven voor de categorieën 5, 8 en 9. Deze cijfers verwijzen naar uw tabel categorie.

Dus deze heeft maar twee attributen (die primary key zijn) namelijk,

klant_id categorie_id
1..............5
1..............2
2..............2


Als je nu alle klanten wil die categorie 5 (food) hebben.

[SQL]SELECT k.naam, k.familienaam
FROM klantencategorie kc INNER JOIN klanten k
kc.klant_id = k.klant_id
INNER JOIN categorie c
kc.categorie_id = c.categorie_id
WHERE c.categorie_id = 5[/SQL]
 
Laatst bewerkt:
Ik zie vaak de link niet. Is er iemand die mij kan uitleggen hoe ik kan zien welke kolommen ik uit de verschillende tabellen moet koppelen.

Op deze vraag heb ik nog niet geantwoord. Hetgeen wat ik nu ga uitleggen is meer datamodellering, maar dat heb je nodig om een database te maken.
Hopelijk is het duidelijk en zoniet, vraag je uitleg.

Je moet altijd nadenken over welke gegevens je gaat opnemen in jouw database. In jouw geval zijn dat klantgegevens en gegevens over de verschillende categorieën.

Klantgegevens gaat sowieso een tabel worden. De tabel Klant met de volgende attributen: klant_id, voornaam, familienaam, adres, postcode, gemeente, emailadres. Eventueel nog extra attributen indien je die nodig hebt.

Belangrijk is dus om in elke tabel een primaire sleutel (klant_id) te zetten. Die identificeert binnen een tabel elke rij uniek.

Merk ook op dat je gegevens gaat splitsen. Je maakt geen attribuut aan naam met daarin de voor- en familienaam.

Vervolgens moet je informatie over de categorieën ook ergens kwijt geraken namelijk, in een nieuwe tabel genaamd Categorie. Deze krijgt de volgende attributen: categorie_id, naam, omschrijving, etc.

Nu is er een belangrijke vraag die je zelf moet stellen.
Kan een bepaalde klant zich inschrijven voor juist één categorie of kan hij er meerdere kiezen?

In het eerste geval blijf je dus bij de twee tabellen. En je zet in de tabel klant een nieuw extra attribuut genaamd, categorie_id. Dit attribuut verwijst dus ook naar een bepaalde categorie_id met bijhorende naam en omschrijving in de tabel Categorie. We noemen dit een referende sleutel of int English the foreign key.

Je zou je kunnen afvragen waarom plaats ik dat nieuw extra attribuut niet in de tabel Categorie? Omdat een klant maar één categorie kan kiezen en omgekeerd, een categorie kan aan meerdere klanten toebehoren (Het zou dus vreemd zijn mocht je klant_id in de tabel Categorie opnemen).


In het andere geval, een klant kan meerdere categorieën kiezen. Je hebt nood aan een nieuwe tabel. Want al gezegd, een klant kan meerdere categorieën kiezen én een categorie kan aan meerdere klanten toebehoren. We spreken hier over een meer-op-meer-relatie en juist daarom maken we een nieuwe tabel.

De naam van die nieuwe tabel mag je geheel zelf kiezen en is soms ook moeilijk om er een zinvolle naam voor te kiezen dus ja… Klant-categorie.

In deze tabel zitten eigenlijk maar 2 of 3 attributen namelijk, uw klant_id en uw categorie_id.
Dus als klant 3 zich inschrijft voor 4 categorieën, dan krijg je het volgende in de tabel 4 records. Deze twee records zijn twee foreign keys. Klant_id verwijst naar klant_id in de tabel Klant en categorie_id verwijst naar categorie_id in de tabel Categorie. Maar elke tabel heeft een primaire sleutel nodig, een primaire sleutel identificeert elke rij uniek, dus is klant_id én categorie_id de primaire sleutel.

klant_id....categorie_id
3.................1
3.................2
3.................4
3.................8

Om het gemakkelijker te maken kan je een derde attribuut toevoegen namelijk een gewoon id. Dit wordt dan de enige primaire sleutel.

id.....klant_id....categorie_id
1.........3.................1
2.........3.................2
3.........3.................4
4.........3.................8
 
Lees ook vooral de beginnerscursus die in de Nieuwsbrief staat. Daar wordt het opzetten van een database vanaf het begin uitgelegd.
 
Bedankt voor de snelle reacties.

Waar kan ik deze nieuwsbrief vinden?

Welke onderdelen koppel ik nu met elkaar in een Query? Moet ik alleen de Id's koppelen?
ik heb een bijlage bijgevoegd van de Query's. kan iemand mij aan de hand van dit voorbeeld uitleggen hoe ik de tabellen moet koppelen?
 

Bijlagen

  • Query.jpg
    Query.jpg
    68 KB · Weergaven: 44
Jammer genoeg is de kwaliteit van het plaatje te slecht om te zien wat er precies gebeurt; wel zie ik teveel lijnen lopen. Ik vermoed, dat je nog geen koppelingen hebt gemaakt in het venster Relaties, zodat Access zelf koppelingen legt op basis van sleutelvelden. En dan worden bijvoorbeeld alle velden die ID heten aan elkaar gelinkt, ook al moet dat helemaal niet.
De Nieuwsbrief vind je onder de knop in de blauwe titelbalk van HelpMij. Kan niet missen... Als je slim bent, laat je hem elke maand bezorgen, dan mis je geen aflevering. Ook dat kun je met één klik regelen!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan