Avatar billede rvj Nybegynder
10. november 2001 - 13:09 Der er 10 kommentarer og
1 løsning

Sammensatte nøgler

Jeg har hørt at man ikke kan lave sammensatte primære nøgler i MySQL.

Er det rigtigt?

NB. Jeg ville være meget taknemlig for et hurtigt svar, da det haster!

På forhånd tak.
Avatar billede light Praktikant
10. november 2001 - 13:16 #1
det tror jeg nok er rigtig nok men jeg er ikke sikker
Avatar billede light Praktikant
10. november 2001 - 13:16 #2
jeg laver ikke så meget MySQL men jeg har læst en del
Avatar billede rvj Nybegynder
10. november 2001 - 13:19 #3
Det undre mig bare at man kan i access, og ikke i MySQL.
Avatar billede light Praktikant
10. november 2001 - 13:22 #4
ja, det ved jeg men access er jo heller ikke en direkte web programmering (ved det godt: heller ikke MySQL) men bare noget med en database men kan tilknytte og MySQL er jo ikke lige det vel !

;)

LIGHT
Avatar billede rvj Nybegynder
10. november 2001 - 13:30 #5
Jeg forstod ikke helt hvad du sagde. :)
Men jeg kan forstå på det hele at det kan man ikke.

Tak for hjælpen!
o\",)
Avatar billede light Praktikant
10. november 2001 - 13:31 #6
yup
Avatar billede mortenfn Nybegynder
10. november 2001 - 14:42 #7
der er meget man ikke kan i MySQL !! som man kan i access og i SQL om ardre databaser,  - jo flere indbyggede funktioner der er i en database jo langsommere arbejder den (selvfølgelig). Hos mysql kommer hastighed før antallet af funktioner - moget der absolut ikke kendetegner Windows (baseret) produkter - der for MySQL få funktioner og stor hastig.

/mysql
Avatar billede morw Nybegynder
10. november 2001 - 15:23 #8
Men kan jo bare selv holde styr på sine id\'s og har således ikke brug for ægte fremmednøgler. Intet problem
Avatar billede alvion Nybegynder
11. november 2001 - 10:52 #9
Jeg er endnu ikke stødt på nogen relationel database manager, der ikke kunne lave sammensatte nøgler. Det er en basal del af den relationelle datamodel.

Det gælder også MySQL. Du kan lave sammensatte nøgler således (beklager hvis der er syntaksfejl):

CREATE TABLE person (
  fornavn VARCHAR(30) NOT NULL,
  efternavn VARCHAR(30) NOT NULL,
  adresse VARCHAR(30),

  PRIMARY KEY(fornavn, efternavn)
);

Eneste krav for en sammensat nøgle er, at nøglen ikke må indeholde NULL værdier (igen er dette gældende for den relationelle model og ikke blot for MySQL).
Avatar billede alvion Nybegynder
11. november 2001 - 10:52 #10
Det gælder i øvrigt alle primære nøgler, at de ikke må have NULL værdier
Avatar billede alvion Nybegynder
11. november 2001 - 10:59 #11
Ovenstående eksempel er måske lidt søgt, så for lige at uddybe:

Sammensatte nøgler er rigtig gode, hvis man skal lave en mange-mange relation mellem to tabeller.

Eksempel: Sælger-kunde relation. En sælger kan have flere kunder, og den samme kunde kan godt få besøg af flere forskellige sælgere (en typisk mange-mange relation).

CREATE TABLE saelger (
  saelger_id INT(11) NOT NULL AUTO_INCREMENT,
  navn VARCHAR(60) NOT NULL,
  etc...,
  PRIMARY KEY(saelger_id)
);

CREATE TABLE kunde (
  kunde_id INT(11) NOT NULL AUTO_INCREMENT,
  navn VARCHAR(60) NOT NULL,
  etc...,
  PRIMARY KEY(kunde_id)
);

Relationen implementeres så som en tabel med en sammensat nøgle:

CREATE TABLE saelger_kunde (
  saelger_id INT(11) NOT NULL,
  kunde_id INT(11) NOT NULL,
  PRIMARY KEY(saelger_id, kunde_id),
  UNIQUE KEY(kunde_id, saelger_id)
);

Nogen vil sikkert spørge, hvorfor jeg laver den sidste UNIQUE KEY. Hvis man nu har brug for at søge i tabellen saelger_kunde, hvor ens søgekriterie er kunde_id og ikke saelger_id, så ville database manageren ikke kunne benytte indeks til søgningen uden denne nøgle.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester