webForumDet fria alternativet

Flera primärnycklar

8 svar · 386 visningar · startad av snabelelefant

snabelelefantMedlem sedan jan. 200158 inlägg
#1

Hur gör jag för att få dubbla primärnycklar i en tabell? Blir det rätt om man gör så här?:

CREATE TABLE PERSONER (
p_id INT UNSIGNED AUTO_INCREMENT,
anst_nr SMALLINT NOT NULL,
p_fnamn VARCHAR(30),
p_enamn VARCHAR(40),
PRIMARY KEY(p_id, anst_nr));

Eller hur gör man annars???

VetgirigMedlem sedan nov. 2000199 inlägg
#2

En tabell kan bara ha en PRIMARY KEY.
Du kan ha flera KEY dvs:

CREATE TABLE PERSONER (
p_id INT UNSIGNED AUTO_INCREMENT,
anst_nr SMALLINT NOT NULL,
p_fnamn VARCHAR(30),
p_enamn VARCHAR(40),
PRIMARY KEY(p_id),

KEY (anst_nr)
);

------------------
Anders Lindbäck,Igiro Internet Giro

LarsGMedlem sedan dec. 200012 464 inlägg
#3

Jo det ser väl korrekt ut, rent syntaktiskt. Jag förstår dock inte riktigt vad du vill uppnå? Vill du att p_id och anst_nr varför sig skall vara unika? I så fall får du sätta den ena som primary key och den andra som unique då det bara går att ha en primärnyckel per tabell.

Som du har skrivit nu, så innebär det att p_id och anst_nr tillsammans skall vara unika vilket är lite suspsekt, ur modelleringssynpunkt, då p_id i sig är unik.

------------------
essentitia preter non sans multiplicandum

snabelelefantMedlem sedan jan. 200158 inlägg
#4

Nej, jag vill att kombinationen av p_id och anst_nr skall vara unik. Hur åstakommer jag det? Fungerar det om jag sätter p_id som PRIMARY KEY och anst_nr som KEY?

snabelelefantMedlem sedan jan. 200158 inlägg
#5

Nu ser jag att jag har skrivit fel... p_id skall INTE vara en räknare, självklart skulle den vara unik i så fall, utan det är ett person_id. Jag tänkte mer generellt, för jag har stött på tabeller där jag vill att en kombination av fält skall vara unik.

LarsGMedlem sedan dec. 200012 464 inlägg
#6

Det var därför jag blev konfunderad.
Du kan ange flera kolumnnamn i en primary key definition.

CREATE TABLE PERSONER ( 
person_id INT UNSIGNED NOT NULL,
anst_nr SMALLINT NOT NULL,
p_fnamn VARCHAR(30),
p_enamn VARCHAR(40),
PRIMARY KEY(person_id, anst_nr));

borde vara ok.

------------------
essentitia preter non sans multiplicandum

snabelelefantMedlem sedan jan. 200158 inlägg
#7

En tabell kan alltså ha mer än EN primary key? Vetgirig är av en annan mening, eller ?

LarsGMedlem sedan dec. 200012 464 inlägg
#8

Nej, det är han nog inte. En primärnyckel kan bestå av flera kolumner, men det får bara finnas en primärnyckel per tabell.

------------------
essentitia preter non sans multiplicandum

snabelelefantMedlem sedan jan. 200158 inlägg
#9

OK, jag är med! Tack för hjälpen!

131 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)