【发布时间】:2022-12-14 21:38:46
【问题描述】:
我有下表:
CREATE TABLE PROPERTY
(PropertyID SMALLINT PRIMARY KEY,
Location VARCHAR(10),
)
CREATE TABLE OFFICE
(OfficeID SMALLINT,
PersonID SMALLINT,
Area VARCHAR(5),
PRIMARY KEY(OfficeID, PersonID)
)
现在,我想创建下表,但我不断收到提到的错误(ORA-02270:此列列表没有匹配的唯一键或主键)
CREATE TABLE FOR_RENT
(PropertyID SMALLINT,
OfficeID SMALLINT,
FOREIGN KEY(PropertyID) REFERENCES PROPERTY(PropertyID),
FOREIGN KEY(OfficeID) REFERENCES OFFICE(OfficeID),
PRIMARY KEY(PropertyID, OfficeID)
)
我想将 PropertyID 和 OfficeID 作为 FOR_RENT 表中的外键,但由于 OfficeID 是 Office 表中的复合键,我相信我收到了错误。我该如何解决?任何输入都会很棒
【问题讨论】:
-
为什么
PersonID是OFFICE表的主键的一部分?该列(无论它的用途是什么)是否应该只是 person 表的外键? -
PersonID 是我的主键,因为仅 OfficeID 就会重复。一个办公室可以有很多人。
-
您肯定想要一张仅供办公室使用的桌子,然后是另一张将人们与办公室联系起来的桌子吗?或者,如果每个人一次只能分配到一个办公室,那么可能是人员表中的办公室列?
-
好吧,我不能——这就是向我提出问题的方式。如果我不改变它,有没有办法解决我的问题?
-
您的外键必须引用匹配主键中的两列;所以你必须再次在 for_rent 表中有一个(或一个)人 - 更多冗余数据,这使得更新更加困难。这似乎并不理想......
标签: sql oracle primary-key