我是 SQL 的新手,并試圖使它有兩個主鍵和一個參考其他表主鍵的外鍵。
我已經嘗試添加作為主鍵的屬性,該屬性缺少需要參考的表,然后將其設為外鍵,但仍然收到“參考列數必須與參考列匹配”的訊息。
如果有我想要實作的解決方案,我將不勝感激。
CREATE TABLE Next_of_Kin
(
Employee_No VARCHAR2(8) NOT NULL,
kin_Number VARCHAR2(8) NOT NULL,
Name VARCHAR2(40) NOT NULL,
relationship VARCHAR2(40) NOT NULL,
contact_number VARCHAR2(11) NOT NULL,
PRIMARY KEY (Employee_No, Kin_Number),
FOREIGN KEY (Employee_No, Kin_Number) REFERENCES Employee(Employee_No)
);
CREATE TABLE Employee
(
Employee_No VARCHAR2(8) NOT NULL,
family_Name VARCHAR2(40) NOT NULL,
given_Name VARCHAR2(40) NOT NULL,
address VARCHAR2(80) NOT NULL,
date_of_Birth DATE NOT NULL,
date_Hired DATE NOT NULL,
supervisor VARCHAR2(40) NULL,
PRIMARY KEY (Employee_No, Supervisor),
FOREIGN KEY (Employee_No,Supervisor)
REFERENCES Employee(Employee_No, Supervisor)
);
uj5u.com熱心網友回復:
大概supervisor參考了一個員工編號(因為主管也是員工),所以應該只有一列。
此外,沒有理由為什么近親條目應該參考另一個近親。您需要強制執行的只是員工編號是指現有員工。
可以將單列鍵宣告為列定義的一部分,這樣可以簡化語法并允許從父列繼承外鍵列的資料型別。
create table employee
( employee_no varchar2(8) primary key
, family_name varchar2(40) not null
, given_name varchar2(40) not null
, address varchar2(80) not null
, date_of_birth date not null
, date_hired date not null
, supervisor references employee(employee_no)
);
create table next_of_kin
( employee_no references employee (employee_no) not null
, kin_number varchar2(8) not null
, name varchar2(40) not null
, relationship varchar2(40) not null
, contact_number varchar2(11) not null
, primary key (employee_no, kin_number)
);
一個表可以有任意多的唯一約束,但只有一個主鍵。但是,在您的示例中,您嘗試定義一個具有兩列的主鍵,這是允許的(盡管此處不需要)。你也可以有一個多列的外鍵,只要它匹配指定表中相應的主約束或唯一約束。
uj5u.com熱心網友回復:
我不知道你的公司,但我很確定員工編號是唯一的。因此,您的員工表的主鍵應該是
Employee_No,沒有主管。您的員工表中的外鍵沒有意義。去掉它。
在您的近親表中,保留主鍵不變,但僅將員工編號設為外鍵:
FOREIGN KEY (Employee_No) REFERENCES Employee(Employee_No)
uj5u.com熱心網友回復:
看起來您希望 EMPLOYEE_NO 成為 EMPLOYEE 的主鍵,但您還希望 (EMPLOYEE_NO, SUPERVISOR) 是唯一的。請注意,此唯一鍵是不必要的 - 因為 EMPLOYEE_NO 是 EMPLOYEE 上的主鍵,它保證是唯一的,因此 (EMPLOYEE_NO, <EMPLOYEE 上的其他列) 的任何組合將自動唯一 - 但有時我會輸入一個唯一鍵就像這樣作為檔案,或者使其可在另一個表的外鍵約束中參考。
所以無論如何,請考慮使用:
(
Employee_No VARCHAR2(8) NOT NULL,
kin_Number VARCHAR2(8) NOT NULL,
Name VARCHAR2(40) NOT NULL,
relationship VARCHAR2(40) NOT NULL,
contact_number VARCHAR2(11) NOT NULL,
PRIMARY KEY (Employee_No, Kin_Number),
FOREIGN KEY (Employee_No) REFERENCES Employee(Employee_No)
);
CREATE TABLE Employee
(
Employee_No VARCHAR2(8) NOT NULL,
family_Name VARCHAR2(40) NOT NULL,
given_Name VARCHAR2(40) NOT NULL,
address VARCHAR2(80) NOT NULL,
date_of_Birth DATE NOT NULL,
date_Hired DATE NOT NULL,
supervisor VARCHAR2(40) NULL,
PRIMARY KEY (Employee_No),
UNIQUE KEY (Employee_No, Supervisor)
);
由于 (EMPLOYEE_NO, KIN_NUMBER) 是 NEXT_OF_KIN 上的主鍵,因此使用 (EMPLOYEE_NO, KIN_NUMBER) 的自參考外鍵是沒有意義的,因為該行將始終只參考自身。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/402000.html
上一篇:如何在Row中顯示垂直分隔線?
