0
A
回答
2
一组列,其包括在一个表的外键必须是指等效的一组列的表中的任一与主键或唯一键约束。
您肯定可以在同一个表中引用相同的PK或UK的2个或更多个FK。这建立了儿童记录与多于一个父记录相关的关系 - 例如,代表生物学孩子的记录可能会有FK记录给他们的父亲以及他们的母亲。
请注意,一个独特的索引不足以达到此目的;需要一个唯一的约束,否则你会得到“ORA-02270:这个列表没有匹配的唯一或主键”。
0
“如果有上指的是相同的主键相同的表中的两个外键? ”
任意数量的子表可以参考父表。在某些情况下,子表可能在同一个父项上拥有多个外键。例如,任何形式的体育比赛都有相同类型的对手 - 球员,球队等等。因此,一场比赛我将拥有该实体的两个实例,所以子表将具有两列,其中外键引用相同的主键。
create table player (
player_id number not null primary key
, name varchar2(30) not null unique
);
create table match (
match_id number not null primary key
, player_1 number not null
, player_2 number not null
, match_played date not null
, result varchar2(10)
, constraint match_player1_fk foreign key (player_1) references player
, constraint match_player2_fk foreign key (player_2) references player
);
外键可以引用唯一约束而不是主键。但这不是标准做法。按照惯例使用外键来执行候选密钥 - 业务密钥 - 并且这些并不总是适合用作外键。
例如在我的例子中,PLAYER.NAME
是一个唯一的键:每个玩家必须有一个独特的名字。但是,使用NAME
作为MATCH
上的外键是不合适的,因为人们可以更改其名称。使用合成主键PLAYER_ID
更为方便,因为它在PLAYER
记录的生命周期内不会改变。
相关问题
- 1. 主键是否总是聚集?
- 2. 外键是否总是引用另一个表中的唯一键?
- 3. 休眠外键是主键
- 4. 休眠:外键是主键
- 5. MySQL外键 - 总是一个好主意?
- 6. 主键是否自动索引?
- 7. SQL:外键引用复合主键
- 8. 外键也是主键的一部分
- 9. 休眠 - @IdClass @ManyToOne - 主键也是外键
- 10. 引用了一个外键是与父表的另一个关键主键
- 11. SQLite多列主键是否需要额外的索引?
- 12. 在主键+外键上创建多重索引是否有性能优势?
- 13. sfGuardUser表是否有主键?
- 14. 标识主键是否总是非群集?
- 15. 外键是否有大小?
- 16. 外键和主键Postgres和索引
- 17. 聚集索引的外键VS主键
- 18. 用主键替换外键
- 19. 如何知道CONSTRAINT_NAME是主键还是外键?
- 20. 主键和外键
- 21. 主键和外键
- 22. 主键和外键?
- 23. 主键总是从1开始?
- 24. Mysql外键引用两个列,它们是两个不同表中的主键
- 25. F#:关键字时总是“意外”
- 26. 外键总是需要约束吗?
- 27. MySQL:使用引用由外键组成的主键的外键创建表
- 28. Linq到SQL设计器是否支持使用复合主键的外键?
- 29. Redshift:是否使用必要的外键来利用分配键?
- 30. SQL:主键还是不主键?
你可以给我们一个你真的需要这个表的例子吗? –