2016-04-17 2 views
0
CREATE TABLE STATEMENTS. 

OK. 0 rows 

OK. 0 rows 

FOREIGN KEY (ProdId) REFERENCES ALLOCATION 
           * 
Error at line 7: 
ORA-02256: number of referencing columns must match referenced columns 

Fehler Im bekommen.ORA-02256: Anzahl der referenzierenden Spalten muss mit den referenzierten Spalten übereinstimmen

Allocation ist schwach Einheit nicht sicher, wie jede Hilfe wäre schön zu beheben: D

CREATE TABLE MANAGER (
MgrId number (3), 
MFirstName varchar2(30), 
MSurName varchar2(30), 
PRIMARY KEY (MgrId) 
); 

CREATE TABLE ALLOCATION (
MgrId number (3), 
ProdId number(4), 
PRIMARY KEY (MgrId, ProdId), 
FOREIGN KEY (MgrId) REFERENCES MANAGER, 
FOREIGN KEY (ProdId) REFERENCES PRODUCT 
); 

CREATE TABLE QUALITYCHECK (
WeekNo number (1), 
Score number (1), 
MgrId number (3) NOT NULL, 
ProdId number(4) NOT NULL, 
PRIMARY KEY (WeekNo, MgrId, ProdId), 
FOREIGN KEY (MgrId) REFERENCES ALLOCATION, 
FOREIGN KEY (ProdId) REFERENCES ALLOCATION 
); 

Antwort

0

Sie müssen auch die Spalte der entsprechenden Tabelle erwähnen, wenn Sie nicht den Primärschlüssel selbst beziehen.

CREATE TABLE ALLOCATION (
    MgrId number (3), 
    ProdId number(4), 
    PRIMARY KEY (MgrId, ProdId), 
    FOREIGN KEY (ProdId) REFERENCES PRODUCT(ProdId), 
    FOREIGN KEY (MgrId) REFERENCES MANAGER(MgrId) 
); 

Und beziehen Sie immer die Elterntabelle. Obwohl es nicht obligatorisch ist. Es ist nur ein Standard zu befolgen.

CREATE TABLE QUALITYCHECK (
    WeekNo number (1), 
    Score number (1), 
    MgrId number (3) NOT NULL, 
    ProdId number(4) NOT NULL, 
    PRIMARY KEY (WeekNo, MgrId, ProdId), 
    FOREIGN KEY (MgrId) REFERENCES MANAGER(MgrId), 
    FOREIGN KEY (ProdId) REFERENCES PRODUCT(ProdId) 
); 
+0

Dies wird empfohlen, ist aber in Oracle nicht erforderlich - und steht in keinem Zusammenhang mit der Fehlermeldung, die das OP erhalten hat. Nicht ein Verdienst für einen Anfänger, sondern ein definitiver Verdienst für einen erfahrenen Board-Teilnehmer wie Sie. Glückwunsch zur Abstimmung! Und wie ich sehe, auch auf der "CORRECT ANSWER"! – mathguy

+0

@mathguy ist es viel von Standard. Wie auch immer, danke für deinen Kommentar. Hinzugefügt viel Info. –

+0

Ich weiß nicht, was "viel von Standard" bedeutet; Im Oracle-Standard ist der Spaltenname OPTIONAL. Und es wird keinen Fehler verursachen. Und der Post des OP zeigt einen Fehler in der Tabelle ALLOCATION als Tabelle REFERENCED, während Ihre Antwort über eine andere Tabelle ist. Sie können "Danke" oder Sie können einfach Ihre Antwort löschen - Ihre Wahl. Nochmals herzlichen Glückwunsch zu den Auszeichnungen! – mathguy

0

ProdID ist eine Spalte, aber die Primärschlüssel in der referenzierten Tabelle sind zwei Spalten, MGRID und ProdID. Sie können keinen FK haben, der auf eine Teilmenge der PK verweist.

Wie Sie beheben, hängt davon ab, was Sie tun möchten. Warum brauchen Sie beispielsweise ProdID, um auf ZUWEISUNG und nicht PRODUKT zu verweisen (eine Tabelle, die Sie übrigens nicht angezeigt haben)?

Verwandte Themen