Avatar billede swaq Nybegynder
31. marts 2004 - 17:59 Der er 1 kommentar og
1 løsning

Problem med sammensatte primærnøgler der indgår i relationer

Hej Eksperter

Har følgende script:
DROP TABLE test1 CASCADE;
DROP TABLE test2;

create table test1 (
    a varchar(25),
    b varchar(25),
    PRIMARY KEY (a,b)
);

create table test2 (
    a varchar(25),
    b varchar(25),
    c varchar(25),
    primary key (a, b, c),
    foreign key (a) references test1(a) on update cascade,
    foreign key (b) references test1(b) on update cascade
);   

test1 har en sammensat primærnøgle, som test2 er relateret til. Med andre ord, der er en "en-til-mange" forbindelse fra test1 til test2. Denne situation er ganske normal i min verden men tilsyneladende ganske problematisk i postgreSQL.

Ovenstående resulterer i følgende fejl:
ERROR:  there is no unique constraint matching given keys for referenced table "test1"

Min egen ressearch har ført til at fejlen umiddelbart kan fjernes ved brug af 'UNIQUE' i test1:
create table test1 (
    a varchar(25) UNIQUE,
    b varchar(25) UNIQUE,
    PRIMARY KEY (a,b)
);

Dette er dog en meget dårlig og ubrugbar løsning, da det jo begrænser antallet af rækker i test1 ganske voldsomt. Lad os antage at kolonne 'a' i test1 er et bilmærke - ja så kan dette bilmærke jo kun fremkomme een gang, hvorved pointen med den sammensatte primærnøgle går fløjten.

Hvordan laver man så sammensætte primærnøgler i postgreSQL?
Avatar billede outofmemory Nybegynder
01. april 2004 - 11:38 #1
det er ret beset ikke postgres der er noget i vejen med. Du skal selvfølgelig bruge en sammensat fremmednøgle overfor en ditto primærnøgle.
Avatar billede swaq Nybegynder
01. april 2004 - 11:52 #2
Har selv fundet løsningen:
DROP TABLE test1 CASCADE;
DROP TABLE test2;

create table test1 (
    a varchar(25),
    b varchar(25),
    PRIMARY KEY (a, b)
);

create table test2 (
    a varchar(25),
    b varchar(25),
    c varchar(25),
    primary key (a, b, c),   
    foreign key (a,b) references test1(a,b) on update cascade
);
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