无法创建表,sql 错误 ORA-02270

Cant create tables, sql error ORA-02270

是的,这个不太确定。 sql 的新手,我认为一切都做对了,有什么想法吗?如果这不是添加外键的方法,有人可以向我解释一下正确的方法吗?非常感谢,谢谢。

CREATE TABLE customer (
reference NUMBER(5) PRIMARY KEY,
company_name VARCHAR2(30),
address VARCHAR2(30),
post_code VARCHAR2(10),
telephone VARCHAR(20),
contact_fname VARCHAR2(20),
contact_sname VARCHAR2(20),
contact_email VARCHAR2(30)
);

CREATE TABLE manifest (
barcode NUMBER(10) PRIMARY KEY,
trip_id NUMBER(10),
pickup_customer_ref VARCHAR2(30),
delivery_customer_ref VARCHAR2(30),
category NUMBER(1),
weight NUMBER(10)
);

CREATE TABLE category (
category NUMBER(1) PRIMARY KEY,
description VARCHAR2(15),
requirements VARCHAR2(30),
FOREIGN KEY (category) REFERENCES manifest(category)
);

CREATE TABLE trip (
trip_id NUMBER(10) PRIMARY KEY,
departure_date DATE,
return_date DATE,
vehicle_id VARCHAR2(10),
employee_no NUMBER(10),
FOREIGN KEY (trip_id) REFERENCES manifest(trip_id)
);

CREATE TABLE vehicle (
registration VARCHAR2(10) PRIMARY KEY,
vehicle_type_id VARCHAR2(10),
model VARCHAR2(15), 
make VARCHAR2(15),
body VARCHAR2(15),
year NUMBER(4),
FOREIGN KEY (registration) REFERENCES trip(registration)
);

CREATE TABLE model (
vehicle_type_id VARCHAR(10) PRIMARY KEY,
make VARCHAR2(15),
model VARCHAR2(15),
FOREIGN KEY (vehicle_type_id) REFERENCES vehicle(vehicle_type_id)
);

CREATE TABLE driver (
employee_no NUMBER(10) PRIMARY KEY,
first_name VARCHAR2(20),
last_name VARCHAR(20),
ni_no VARCHAR2(15),
telephone VARCHAR2(20),
mobile VARCHAR2(12),
hazardous_goods VARCHAR2(1),
FOREIGN KEY (employee_no) REFERENCES trip(employee_no)
);

我收到的错误消息是

SQL Error: ORA-02270: no matching unique or primary key for this column-list
02270. 00000 -  "no matching unique or primary key for this column-list"
*Cause:    A REFERENCES clause in a CREATE/ALTER TABLE statement
       gives a column-list for which there is no matching unique or primary
       key constraint in the referenced table.
*Action:   Find the correct column names using the ALL_CONS_COLUMNS
       catalog view

我在清单 btw

之后的每个 table 都收到此错误

错误信息很清楚。外键的引用必须是另一个 table 中的唯一键或主键。所以在 category table.

中这是错误的
FOREIGN KEY (category) REFERENCES manifest(category)

我假设您希望清单看起来像这样:

CREATE TABLE manifest (
    barcode NUMBER(10) PRIMARY KEY,
    trip_id NUMBER(10) REFERENCES trip(trip_id),
    pickup_customer_ref VARCHAR2(30),
    delivery_customer_ref VARCHAR2(30),
    category NUMBER(1) REFERENCES category(category),
    weight NUMBER(10)
);

其他使用外键的地方以此类推。 (这对外键引用使用简写符号;CREATE TABLE 中的单独子句也可以。)

当然,manifest的定义必须在之后类别和trip,在这个例子中。

换句话说,引用进入 other table,而不是定义主键的地方。

此外,我建议与外键的名称保持一致。至少,它们通常应尽可能与主键同名。

trip_id、vehicle_type_id和employee_no都需要标记为UNIQUE。