2012-11-27 177 views
2

我只是對符號有一個簡單的問題。我現在有兩張桌子。Oracle Sql:外鍵也是主鍵語法

這其中有基本的動物信息:

create table d_animals (
    an_id  integer  primary key 
, an_gender varchar2(1) not null 
, an_dob date  not null 
, an_name varchar2(10) not null 
); 

這是一個關於貓:

create table d_cats (
     an_id      integer  primary key 
    , feline_leukemia_test_date date  not null 
    , an_id foreign key references d_animals_(an_id) 
    ); 

正如你所看到的,我試圖用an_id作爲d_cats主鍵,但還請參考d_animals表中的an_id。我得到d_cats以下錯誤:

ORA-00957: duplicate column name 

那麼我該如何正確寫這個?

此外,我不想爲d_cats創建另一列。我的教授希望我們只用an_id和feline_leukemia_test_Date編寫d_cats。 謝謝。

回答

4

使用一個命名約束,即:

create table d_cats (
    an_id      integer  primary key 
, feline_leukemia_test_date date  not null 
, constraint d_cats_animals_fk foreign key (an_id) references d_animals (an_id) 
); 
+0

謝謝。所以只是爲了澄清,這個表中的兩列將是an_id和feline_leuk_test_date? – user1682055

+0

這是正確的... –

0

爲外鍵使用不同的名稱。

create table d_cats (
     an_id      integer  primary key 
    , feline_leukemia_test_date date  not null 
    , cats_an_id foreign key references d_animals_(an_id) 
    ); 
+0

我剛剛編輯我的帖子:另外,我不想爲d_cats創建另一列。我的教授希望我們只用an_id和feline_leukemia_test_Date編寫d_cats。 – user1682055

7

您可以內聯外鍵太:

create table d_cats 
(an_id      integer  primary key references d_animals(an_id) 
, feline_leukemia_test_date date  not null 
); 
0

如果您需要使用相同的列d_animals表成爲主要鍵和外鍵,那麼你可以使用下面的語句。

CREATE TABLE d_cats 
(
    an_id      INTEGER PRIMARY KEY, 
    feline_leukemia_test_date DATE NOT NULL, 
    CONSTRAINT PK_d_cats_an_id PRIMARY KEY (an_id), 
    CONSTRAINT FK_d_cats_an_id FOREIGN KEY (an_id) REFERENCES d_animals(an_id) 
);