我有以下两个表:
客房:
ID_Rooms PK number,
RoomNumber number,
COD_RoomType number,
RoomPrice number,
Floor number
D_ROOMTYPE:
ID_d_RoomType PK number,
RoomType varchar2,
COD_RoomType number
第一个表格存储有关酒店房间的信息,第二个表格包含房间类型的编码(双人房,三人房,家庭房等)。第二个表格中的数据将用于识别第一个房间类型。
我需要在两个表之间建立关系,但不是基于主/外键关系,而是在两者中出现的COD_RoomType列上。
我试过了:
ALTER TABLE rooms
ADD CONSTRAINT rooms_FK1 FOREIGN KEY (COD_RoomType) REFERENCES d_RoomType(COD_RoomType) enable;
但我收到以下错误报告:
错误报告:
SQL错误:ORA-02270:没有匹配的唯一或主要 此列列表的键 02270. 00000 - "此列列表没有匹配的唯一或主键"
*原因:CREATE / ALTER TABLE语句中的REFERENCES子句 给出一个没有匹配的唯一或主要列的列表 引用表中的键约束。
*操作:使用ALL_CONS_COLUMNS查找正确的列名称 目录视图
是否有任何方法可以在不使用primary / foreingn键的情况下在COD_RoomType列上建立两个表之间的关系?如果是这样,我必须做什么其他修改以及SQL代码是什么样的?
谢谢你, 克林
答案 0 :(得分:1)
如果我理解的话,你需要在引用的表上有一个唯一的约束:
SQL> CREATE TABLE rooms
2 (
3 ID_Rooms NUMBER PRIMARY KEY,
4 RoomNumber NUMBER,
5 COD_RoomType NUMBER,
6 RoomPrice NUMBER,
7 FLOOR NUMBER
8 );
Table created.
SQL> CREATE TABLE D_ROOMTYPE
2 (
3 ID_d_RoomType NUMBER PRIMARY KEY,
4 RoomType VARCHAR2(100),
5 COD_RoomType NUMBER
6 );
Table created.
SQL> ALTER TABLE D_ROOMTYPE ADD CONSTRAINT UNIQUE_COD_RoomType UNIQUE (COD_RoomType);
Table altered.
SQL> ALTER TABLE rooms
2 ADD CONSTRAINT rooms_FK1 FOREIGN KEY (COD_RoomType) REFERENCES d_RoomType(COD_RoomType) ENABLE;
Table altered.
但是,在大多数情况下,最好根据引用表的PK添加FK,而不是对引用表中的代码进行反规范化