Hier ben ik weer en voor alle duidelijkheid ik heb zelf nog nooit met koppeltabellen gewerkt of zelf (kunnen) gemaakt.
Ik heb twee tabellen Honden en Fokkers waarbij ik diverse velden heb staan met unieke gegevens.
Nu wil ik graag een query maken waarbij ik de gegevens uit de tabel Fokker kan halen en ook gegevens uit de tabel Honden.
Een voorbeeld wat ik graag wil realiserener:
Er zijn fokkers die hebben puppies en nu wil ik een pagina maken waarbij ik zowel de fokkers vermeld (of een gedeelte van de gegevens van de tabel) en daarbij welke honden deze puppies hebben gekregen en ook het aantal puppies met hun kenmerken.
De opbouw van beide tabellen is als volgt:
Fokkers
id int(11)
fokker_id int(11)
kennelnaam varchar(255)
plaatje varchar(255)
naam varchar(150)
adres varchar(255)
postcode varchar(10)
woonplaats varchar(255)
telnr varchar(15)
email varchar(100)
website varchar(50)
bericht text
inschrijfdatum datetime
Honden
id int(11)
fokker_id int(11)
naam varchar(150)
geboortedatum date
moeder_id int(11)
vader_id int(11)
geslacht enum('Reu', 'Teef')
kenmerk varchar(255)
Deze twee tabellen zijn er al en er is ook fictief data in.
Ik mis het ras_id
kenmerk kan voor meerdere honden hetzelfde zijn dus eigenlijk aparte table.
fokkers
id int(11)
fokker_id int(11)
kennelnaam varchar(255)
plaatje varchar(255)
naam varchar(150)
adres varchar(255)
postcode varchar(10)
woonplaats varchar(255)
telnr varchar(15)
email varchar(100)
website varchar(50)
bericht text
inschrijfdatum datetim
id int(11)
fokker_id int(11)
Is volgens mij dubbel.
Het adres van de kennel kan je ook in een aparte tabel stoppen. Kortweg alles wat bij meerdere honden of fokkers voor kan komen moet (eigenlijk) een eigen tabel hebben.
ik denk daarbij aan hond_kleur, fokker_woonplaats, enz
@ Klaasjan : daar zit wat in wat je zegt en ik ga hier is wat in rangschikken en hernoemen en dan kom ik er bij je op terug. Ik heb nog geen idee hoe alles dan verder zou moeten voor wat betreft het samenstellen van de query maar eerst maar is de opbouw van de database OK hebben is mijn idee. Bedankt voor zover voor het meedenken !
Het vader en moeder-id in de tabel honden is eigenlijk niet ideaal. Je zou deze gegevens eigenlijk in een aparte kopeltabel moeten zetten. Op basis van de gekoppelde hond blijkt dan of dit de vader of de moeder is, afhankelijk van het geslacht van deze hond. Het geslacht wordt dan slechts 1 keer opgeslagen. Nu heeft de kolom waarin de ouder staat ook een betekenis m.b.t. het geslacht terwijl het geslacht al is opgeslagen.
tabel 'ouders':
id (kun je evt. weglaten)
hond_id (FK met de tabel honden)
ouder_id (FK met de tabel honden)
De combinatie van hond_id en ouder_id moet de eigenschap UNIQUE meekrijgen.
Verder zou je in de database nog een constraint mee moeten geven dat een hond niet aan 2 teefjes of 2 reuen kan worden gekoppeld.
Zorg er voor dat je de innoDB-engine binnen MySQL gebruikt, anders kun je geen foreignkey's gebruiken.
Hoe maak ik een koppeltabel voor dit:
Het vader en moeder-id in de tabel honden is eigenlijk niet ideaal. Je zou deze gegevens eigenlijk in een aparte kopeltabel moeten zetten. Ik kan je motivatie helemaal begrijpen!
Wat is bedoelt met (FK met de tabel honden) wat hier staat:
tabel 'ouders':
hond_id (FK met de tabel honden)
ouder_id (FK met de tabel honden)
Hoe geef ik een constraint mee in de database?
Wat is bedoelt met innoDB-engine binnen MySQL?
Moet ik wat aanvinken of?
Wellicht ga je lachen om deze vragen maar ja het is niet anders.... Wat ik graag wil is een correct functionerende database waar ik straks veel mensen blij mee kan maken :)
FK staat voor Foreign Key. Deze komt voor bij meer op meer relaties zoals in Frank zijn voorstel de bedoeling is
Meestal gebruiken mensen de my_isam tables. Frank zijn suggestie is de INNODB tables te gebruiken ivm het ontbreken van CONSTRAINTS in my_isam.
Een constraint is een voorwaarde welke je reeds in de DB kunt opgegeven.
Bijv in een veld van een table kan alleen de waarde blaat voorkomen.
Of de waarde blaat mag alleen voorkomen in de table als deze ook voorkomt in een andere tabel.
Zwolle mag alleen gebruikt worden als woonplaats als deze ook ik de tabel woonplaatsen voorkomt.
Houd je er niet aan dan krijg je een CONTRAIN KEY VIOLATION.
Kijk eens ook eens naar de tut van Remco van Arkelen over POTGRESQL. Staat ook een hoop info over DB design in
Wellicht ga je lachen om deze vragen maar ja het is niet anders.... Wat ik graag wil is een correct functionerende database waar ik straks veel mensen blij mee kan maken
Helder Klaasjan voor deze uitleg.
Ga ik nu eerst effies naar de tut van Remco en dan kom ik wel weer terug met vragen voor het opzetten want ik geloof beslist dat dit goed gaat komen ;)