> Tror jeg trenger litt veiledning når det kommer til primery key og hvor > den skal settes i de andre tabellene. Ja, dette er litt vrient å skjønne i MySQL, når man ser relasjoner. Man har nemlig ikke relasjoner i MySQL. Så man må liksom bare tenke seg at de er der. Man oppretter et felt som er like stort som primærnøkkelfeltet i den tabellen man har relasjon med, og så bruker man det som fremmednøkkel. Så tenker man bare at de som har samme verdi hører sammen. et kjapt eksempel: Vi tenker oss at vi lager en samlerdatabase med colakorker. Vi har to tabeller: En med personer, og en med cola-korkene. Hver person kan ha flere korker, men en kork kan bare ha en eier. Det blir en en-til-mange-relasjon som ser slik ut, omtrent: _____________ ____________ | Person | | Korker | |-----------| |----------| | person_id |-|---o<| kork_id | | navn | | tekst | ¯¯¯¯¯¯¯¯¯¯¯¯¯ | eier_id* | ¯¯¯¯¯¯¯¯¯¯¯¯ her er person_id og kork_id primærnøkler, mens eier_id er en fremmednøkkel som peker på person_id. Vi lager tabeller: CREATE TABLE personer( person_id int unsigned auto_increment not null, navn varchar(64), primary key (person_id) ); CREATE TABLE korker( kork_id int unsigned auto_increment not null, tekst varchar(64), eier_id int unsigned, # samme type som person_id primary key (kork_id) ); Vi legger inn to personer: INSERT INTO personer(navn) VALUES("Geir"); INSERT INTO personer(navn) VALUES("Trond"); Nå har vi to personer i tabellen vår: mysql> SELECT * FROM personer; +-----------+-------+ | person_id | navn | +-----------+-------+ | 1 | Geir | | 2 | Trond | +-----------+-------+ 2 rows in set (0.02 sec) Så legger vi inn to korker. Geir eier begge to, og siden Geir har person_id som er 1, setter vi eier_id til 1. Vi legger også inn en kork på Trond. Den får eier_id 2. INSERT INTO korker(tekst,eier_id) VALUES('Gork i parken', 1); INSERT INTO korker(tekst,eier_id) VALUES('Glemt passordet?', 1); INSERT INTO korker(tekst,eier_id) VALUES('Best i verden', 2); Nå har vi tre korker i tabellen vår: mysql> SELECT * FROM korker; +---------+------------------+---------+ | kork_id | tekst | eier_id | +---------+------------------+---------+ | 1 | Gork i parken | 1 | | 2 | Glemt passordet? | 1 | | 3 | Best i verden | 2 | +---------+------------------+---------+ 3 rows in set (0.00 sec) Hvis vi lurer på hvem som eier "Gork i parken" kan vi bare se på feltet eier_id, og så sjekke i personer hvem som har det nummeret. Dette blir jo litt tungvint, så vi kan også få MySQL til å gjøre det for oss. Da gjør vi noe ala dette (som kommer i en senere øving): mysql> SELECT person_id,navn,kork_id,tekst FROM personer,korker -> WHERE personer.person_id=korker.eier_id; +-----------+-------+---------+------------------+ | person_id | navn | kork_id | tekst | +-----------+-------+---------+------------------+ | 1 | Geir | 1 | Gork i parken | | 1 | Geir | 2 | Glemt passordet? | | 2 | Trond | 3 | Best i verden | +-----------+-------+---------+------------------+ 3 rows in set (0.00 sec) Og om vi ikke er interessert i de sære tallene kan vi jo bare droppe dem også: mysql> SELECT navn,tekst FROM personer,korker -> WHERE personer.person_id=korker.eier_id; +-------+------------------+ | navn | tekst | +-------+------------------+ | Geir | Gork i parken | | Geir | Glemt passordet? | | Trond | Best i verden | +-------+------------------+ 3 rows in set (0.01 sec) Håper dette ble litt lettere å forstå. -- Knut Auvor