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. 外键引用的主键可以是mysql中的varchar(255)吗?
- 7. 外键的字段类型是否可以与引用的主键不同?
- 8. 主键是否自动索引?
- 9. 主键是否自动成为索引?
- 10. MySQL查询外键引用主键
- 11. 对外键的两个主键引用
- 12. SQL:外键引用复合主键
- 13. 外键也是主键的一部分
- 14. Oracle Sql:外键也是主键语法
- 15. 休眠 - @IdClass @ManyToOne - 主键也是外键
- 16. 当fk列是pk的子集时,主键索引是否会用作外键的索引?
- 17. SQLite多列主键是否需要额外的索引?
- 18. 引用了一个外键是与父表的另一个关键主键
- 19. 主键也是索引吗?
- 20. 在主键+外键上创建多重索引是否有性能优势?
- 21. 主键和外键是否在同一张表中
- 22. WebSQL是否支持主键?
- 23. sfGuardUser表是否有主键?
- 24. 标识主键是否总是非群集?
- 25. 外键是否有大小?
- 26. JPA是否需要外键
- 27. 聚集索引的外键VS主键
- 28. 外键和主键Postgres和索引
- 29. 是否使用单个主键或复合主键?
- 30. 用主键替换外键
你可以给我们一个你真的需要这个表的例子吗? –