求助主外键约束问题,此列列表的唯一关键字或主键不匹配

1111111 2008-09-24 02:06:05
有2个表,A和B
A我创建主键约束是这样的
CONSTRAINT tab_t_pk PRIMARY KEY (tab_col1,tab_col2)

B表我建立外键约束的是
CONSTRAINT tab_t_fk FOREIGN KEY (tab_col1) REFERENCES A(tab_col1)

创建b表的外键约束时,报:此列列表的唯一关键字或主键不匹配 这个错


请大家帮忙
...全文
3297 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhang412723 2011-08-30
  • 打赏
  • 举报
回复
10楼,谢谢啦。
Miya_HQ 2011-05-04
  • 打赏
  • 举报
回复
主键错误
luyaobeautiful 2010-08-19
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 1111111 的回复:]
我现在把booking中的外键改成hotelNo和roomNo了,引用room表中的那roomNo和hotelNo的外键。
那这样就可以了。根据上边的题目,我这样做对吗?
[/Quote]
我认为这正是解决的办法。
我再做一个影像租赁系统时也遇到了同样的情况,就是增加了参照表的外键,让它相应地参照被参照表的联合主键,问题解决了。
jhone99 2008-09-24
  • 打赏
  • 举报
回复
Room (hotelNo)的fk是Hotel (hotelNo)

Booking (guestNo) fk是Guest (guestNo)

Booking (hotelNo) fk是Hotel (hotelNo)


Booking (roomNo)的fk不是Room (roomNo)
因为它会重复
robin_ares 2008-09-24
  • 打赏
  • 举报
回复
tab_col1,tab_col2都要有外间
wren4255 2008-09-24
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 vc555 的回复:]
引用楼主 1111111 的帖子:
有2个表,A和B
A我创建主键约束是这样的
CONSTRAINT tab_t_pk PRIMARY KEY (tab_col1,tab_col2)

B表我建立外键约束的是
CONSTRAINT tab_t_fk FOREIGN KEY (tab_col1) REFERENCES A(tab_col1)

创建b表的外键约束时,报:此列列表的唯一关键字或主键不匹配 这个错


请大家帮忙

我没看你的这个逻辑需求是否正确合理,仅回答你在一个表的主键包含两列,然后第二个表外键其中一个列…
[/Quote]
只有引用的内容不允许回复!!
wren4255 2008-09-24
  • 打赏
  • 举报
回复
up
真的每遇到过这种情况哦。
一般都是Booking含有 roomNo, hotelNo
vc555 2008-09-24
  • 打赏
  • 举报
回复
[Quote=引用楼主 1111111 的帖子:]
有2个表,A和B
A我创建主键约束是这样的
CONSTRAINT tab_t_pk PRIMARY KEY (tab_col1,tab_col2)

B表我建立外键约束的是
CONSTRAINT tab_t_fk FOREIGN KEY (tab_col1) REFERENCES A(tab_col1)

创建b表的外键约束时,报:此列列表的唯一关键字或主键不匹配 这个错


请大家帮忙
[/Quote]
我没看你的这个逻辑需求是否正确合理,仅回答你在一个表的主键包含两列,然后第二个表外键其中一个列的问题:
OPER@tl>create table test(aaa number,bbb number,primary key(aaa,bbb));

表已创建。

OPER@tl>create table test2(aaa number references test(aaa));
create table test2(aaa number references test(aaa))
*
第 1 行出现错误:
ORA-02270: 此列列表的唯一关键字或主键不匹配


OPER@tl>alter table test add constraint xx unique(aaa);

表已更改。

OPER@tl>create table test2(aaa number references test(aaa));

表已创建。

OPER@tl>
1111111 2008-09-24
  • 打赏
  • 举报
回复
我现在把booking中的外键改成hotelNo和roomNo了,引用room表中的那roomNo和hotelNo的外键。
那这样就可以了。根据上边的题目,我这样做对吗?
1111111 2008-09-24
  • 打赏
  • 举报
回复
麻烦大家了,原题是这样的
Hotel (hotelNo, hotelName, city)
Room (roomNo, hotelNo, type, price)
Booking (hotelNo, guestNo, dateFrom, dateTo,roomNo)
Guest (guestNo,guestName,guestAddress)

红的都是主键,booking内的roomNo肯定是引用Room表的roomNo的外键呀

那Room表中,不得把前2个字段都设置成联合主键吗?
这样的话,那怎样设置booking表中roomNo这个外键呢?
jhone99 2008-09-24
  • 打赏
  • 举报
回复
你的逻辑有问题,a中是联合主键,b中的外键却只关联a中的一个字段,导致不唯一,当然错了
sleepzzzzz 2008-09-24
  • 打赏
  • 举报
回复
意思即是tab_col1在A表中必须是有唯一约束或是主键才行,主外键关系是主表和从(子)表关系.
1111111 2008-09-24
  • 打赏
  • 举报
回复
但是联合主键是已经设定好的,改不了的。题目是这样的啊。不知道为什么不能设外键。
1111111 2008-09-24
  • 打赏
  • 举报
回复
不行啊,刚创建表的时候,什么都没有的时候,就不可以这样。
我上边写的语句可以吗?没错吧?
sleepzzzzz 2008-09-24
  • 打赏
  • 举报
回复
可以这样实现你的要求:
新增一个字段ID为主键代替你原来的联合主键,tab_col1,tab_col2这两个字段上使用唯一约束,B表references ID即可.
sleepzzzzz 2008-09-24
  • 打赏
  • 举报
回复
tab_col1在A表中必有唯一才行的
sleepzzzzz 2008-09-24
  • 打赏
  • 举报
回复
把表B中的数据清掉再建外建

17,090

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧