Внешние ключи и первичные ключи одновременно - PullRequest
6 голосов
/ 26 декабря 2010

Я пытаюсь создать таблицу (orderdetails2); таблица имеет два FK и PK на двух столбцах FK. Вот мой код:

Версия 1

    create table OrderDetails2 (
PFOrder_ID Number(3)  FOREIGN KEY REFERENCES Orderr(Order_ID),
PFProduct_ID Number(3) FOREIGN KEY REFERENCES Product(Product_ID),
CONSTRAINT PF PRIMARY KEY (PFOrder_ID,PFProduct_ID),
CONSTRAINT FK_1 FOREIGN KEY (PFProudct_ID)
REFERENCES Product(Product_ID),
CONSTRAINT FK_2 FOREIGN KEY (PFOrder_ID)
REFERENCES Orderr(Order_ID),

Версия 2

            create table OrderDetails2 (
    PFOrder_ID Number(3)
    PFProduct_ID Number(3) 
    CONSTRAINT PF PRIMARY KEY (PFOrder_ID,PFProduct_ID),
    CONSTRAINT FK_1 FOREIGN KEY (PFProudct_ID) REFERENCES Product(Product_ID),
    CONSTRAINT FK_2 FOREIGN KEY (PFOrder_ID) REFERENCES Orderr(Order_ID)
);

Я использую Oracle Express. Проблема появляется, когда я запускаю код. Вот оно (для версии 1):

ORA-00907: missing right parenthesis

В чем проблема?

Ответы [ 2 ]

4 голосов
/ 26 декабря 2010

Начиная с варианта кода с:

create table OrderDetails2 (
    PFOrder_ID Number(3)
    PFProduct_ID Number(3) 
    CONSTRAINT PF PRIMARY KEY (PFOrder_ID,PFProduct_ID),
    CONSTRAINT FK_1 FOREIGN KEY (PFProudct_ID) REFERENCES Product(Product_ID),
    CONSTRAINT FK_2 FOREIGN KEY (PFOrder_ID) REFERENCES Orderr(Order_ID)
);

Вы пропустили запятую после PFOrder_ID NUMBER(3) и после PFPoduct_ID NUMBER(3).

CREATE TABLE OrderDetails2
(
    PFOrder_ID   NUMBER(3),
    PFProduct_ID NUMBER(3), 
    CONSTRAINT PF   PRIMARY KEY (PFOrder_ID, PFProduct_ID),
    CONSTRAINT FK_1 FOREIGN KEY (PFProduct_ID) REFERENCES Product(Product_ID),
    CONSTRAINT FK_2 FOREIGN KEY (PFOrder_ID)   REFERENCES Orderr(Order_ID)
);

Предложение PRIMARY KEY должно быть отделено от столбца PFProduct_ID, потому что это составной ключ. (Правильно ли написано Orderr?) И в оригинале PFProudct_ID неверно. Если вы программист, вы должны уметь писать по буквам последовательно (даже если это неправильно в широком смысле письма).

2 голосов
/ 26 декабря 2010

Заменить последнюю запятую на закрывающую скобку: ).

CREATE TABLE OrderDetails2
(
    ...,
    CONSTRAINT FK_2 FOREIGN KEY (PFOrder_ID) REFERENCES Orderr(Order_ID)
)
...