簡體   English   中英

ORA-02270:此列列表沒有匹配的唯一鍵或主鍵

[英]ORA-02270: no matching unique or primary key for this column-list

我有以下SQL代碼

CREATE TABLE EMPLOYEES
(
empID       NUMBER     NOT NULL,
ssn         CHAR(10)    NOT NULL,
fname       VARCHAR(20) NOT NULL,
minit       VARCHAR(15),
lname       VARCHAR(30) NOT NULL,
gender      CHAR(2),
email       VARCHAR(40),
street      VARCHAR(40),
postalCode  NUMBER,
city        VARCHAR(20),
country     VARCHAR(20),
job         VARCHAR(20),
salary      NUMBER(*,2),
birthdate   DATE,
specialization   VARCHAR(30),
username         VARCHAR(25),
password         VARCHAR(25),
levelOfClearance VARCHAR(20),

PRIMARY KEY (empID),
UNIQUE      (ssn)
);

CREATE TABLE PATIENTS
(
patientID   NUMBER NOT NULL,
healthInsID NUMBER,
fname       VARCHAR(20) NOT NULL,
minit       VARCHAR(15),
lname       VARCHAR(30) NOT NULL,
gender      CHAR(1),
email       VARCHAR(40),
street      VARCHAR(40),
postalCode  CHAR(4),
city        VARCHAR(20),
country     VARCHAR(20),

PRIMARY KEY  (patientID),
FOREIGN KEY  (healthInsID) REFERENCES HEALTH_INSURANCES (healthInsID)
ON DELETE SET NULL    
);

CREATE TABLE APPOINTMENTS
(
appointmentID NUMBER NOT NULL,
empID NUMBER NOT NULL,
appointmentDate DATE,
cost NUMBER(*,2),
patientID NUMBER,

PRIMARY KEY (appointmentID),
FOREIGN KEY (empID) REFERENCES EMPLOYEES (empID)
ON DELETE SET NULL,
FOREIGN KEY (patientID) REFERENCES PATIENTS
ON DELETE SET NULL
);

CREATE TABLE SYMPTOMS
(
appointmentID NUMBER  NOT NULL,
description VARCHAR(100),

PRIMARY KEY (appointmentID),
FOREIGN KEY (appointmentID) REFERENCES APPOINTMENTS (appointmentID)
ON DELETE SET NULL
);

創建前3個表沒有問題,但是最后一個表給我錯誤“ ORA-02270:此列列表沒有匹配的唯一鍵或主鍵”。 我已經搜索了很多,但找不到任何解決方案。

不確定,但我認為問題可能出在symptoms表的最后一行

CREATE TABLE SYMPTOMS
(
appointmentID NUMBER  NOT NULL,  <-- it's NOT NULL
description VARCHAR(100),

PRIMARY KEY (appointmentID),
**FOREIGN KEY (appointmentID) REFERENCES APPOINTMENTS (appointmentID)
ON DELETE SET NULL** <-- here you are saying -- set to null on delete 
);

您正在嘗試nullappointmentID您已聲明為non null 這看起來不正確。 我嘗試on delete cascade創建相同的表,它工作正常。

(要么)

嘗試如下創建您的SYMPTOMS

CREATE TABLE SYMPTOMS
(
appointmentID number  NOT NULL,
description VARCHAR(100),
FK_APT_APTID number null,  

PRIMARY KEY (appointmentID),
FOREIGN KEY (FK_APT_APTID) REFERENCES APPOINTMENTS (appointmentID)
ON DELETE set null
);

看到這個樣本小提琴

http://sqlfiddle.com/#!3/826dd

問題在於SYMPTOMS表,您的PK可以設置為null(這是不可能的),我建議您執行以下操作:

  1. 將症狀ID列添加為PK(或將描述和約會ID的組合設置為PK)
  2. 在刪除級聯上設置或不設置刪除策略:如果刪除約會,這將導致錯誤,並引發需要在代碼中處理的異常。

sql小提琴: http ://sqlfiddle.com/#!4 / 67d4b

CREATE TABLE SYMPTOMS
(
SymptomID     NUMBER NOT NULL,
appointmentID NUMBER  NOT NULL,
description VARCHAR(100),

PRIMARY KEY (appointmentID),
FOREIGN KEY (appointmentID) REFERENCES APPOINTMENTS (appointmentID)
);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM