【发布时间】:2016-01-01 02:32:43
【问题描述】:
我正在尝试为 SQL Oracle 中的关联实体添加两个外键。我从另一个表中引用的主键是复合主键。当我尝试输入 SQL 时,它说
此列列表没有匹配的唯一键或主键
我用来创建 tbl_customer 的代码
CREATE TABLE tbl_Customer(
customer_id NUMBER(4)
CONSTRAINT pk_customer PRIMARY KEY,
CustomerName VARCHAR2(50) NOT NULL,
Telephone VARCHAR2(10),
CusEmail VARCHAR2(20),
CONSTRAINT cus_email UNIQUE(CusEmail),
location_id NUMBER(4)
CONSTRAINT fk_location_id references tbl_Location(location_id));
用于创建 tbl_Vehicle 的 SQL
CREATE TABLE tbl_Vehicle(
vehicle_id NUMBER(4),
PlateNo VARCHAR2(10),
CONSTRAINT pk_v PRIMARY KEY(vehicle_id,PlateNo),
Brand VARCHAR2(20),
Model VARCHAR2(10),
TotalNoSeats NUMBER(2),
Class VARCHAR2(4) NOT NULL,
CONSTRAINT no_seats CHECK (TotalNoSeats<100),
driver_id NUMBER(4)
CONSTRAINT fk_driveridV references tbl_Driver(driver_id),
location_id NUMBER(4)
CONSTRAINT fk_locationV references tbl_Location(location_id));
关联表是
CREATE TABLE tbl_Customer_Vehicle(
customer_id NUMBER(4)
CONSTRAINT fk_customer_id references tbl_Customer(customer_id),
vehicle_id NUMBER(4)
CONSTRAINT fk_vehicle_id references tbl_Vehicle(vehicle_id)
);
错误在哪一行
CONSTRAINT fk_vehicle_id references tbl_Vehicle(vehicle_id)
*
这个错误是因为vehicle_id 是复合主键吗? 请帮忙!!
【问题讨论】:
-
那么如何为关联表创建外键呢?
-
子表中还需要
PlateNo列 -
您能告诉我如何正确查询子表吗
-
您需要先在
tbl_Customer_Vehicle表中添加PlateNo列 -
你的意思是查询必须像这样 CREATE TABLE tbl_Customer_Vehicle( customer_id NUMBER(4) CONSTRAINT fk_customer_id references tbl_Customer(customer_id), vehicle_id NUMBER(4) CONSTRAINT fk_vehicle_id references tbl_Vehicle(vehicle_id), PlateNumber NUMBER (10) CONSTRAINT fk_Platen0 引用 tbl_Vehicle(PlateNumber );
标签: sql database oracle foreign-keys composite-primary-key