Det ser ut som productorder.oid
är en del av en primärnyckel med flera kolumner, och det är inte kolumnen längst till vänster i primärnyckeln. (Inkludera i framtiden resultatet av VISA SKAPA TABELL
När du deklarerar en främmande nyckel måste du referera till kolumnen längst till vänster i primärnyckeln.
När du refererar till en primärnyckel med flera kolumner måste den främmande nyckeln ha samma antal kolumner i samma ordning.
Fel (inte tillräckligt med kolumner och hänvisar till den andra kolumnen i primärnyckeln):
CREATE TABLE parent (x INT, y INT, PRIMARY KEY (x, y));
CREATE TABLE child (y INT, FOREIGN KEY (y) REFERENCES parent(y));
Fel (individuella främmande nycklar som varje hänvisar till del av den sammansatta primärnyckeln):
CREATE TABLE parent (x INT, y INT, PRIMARY KEY (x, y));
CREATE TABLE child (x INT, y INT,
FOREIGN KEY (x) REFERENCES parent(x),
FOREIGN KEY (y) REFERENCES parent(y)
);
Höger (samma kolumner):
CREATE TABLE parent (x INT, y INT, PRIMARY KEY (x, y));
CREATE TABLE child (x INT, y INT, FOREIGN KEY (x, y) REFERENCES parent(x, y));
Angående din kommentar:
Jag tänker nu att ditt verkliga problem är att du har förhållandet omvänt. Du försöker deklarera en främmande nyckel i leveransadress
hänvisar till produktorder
, men jag förväntar mig att referensen går åt andra hållet.
ALTER TABLE productorder ADD FOREIGN KEY (oid) REFERENCES deliveryaddress (oid);
Då har du inget fel, eftersom primärnyckeln för leveransadress
är bara en kolumn.
Jag tror att detta förhållande är mer vettigt i en typisk e-handelsapplikation. Det finns många beställningar som kan referera till samma adress. Det motsatta förhållandet är förmodligen inte vad du vill, eftersom det är meningslöst för många adresser att referera till en enda produktorder.