外键可以引用具有复合(即两列的组合)键的表吗?
Posted
技术标签:
【中文标题】外键可以引用具有复合(即两列的组合)键的表吗?【英文标题】:Can foreign key reference to a table with composite(i.e combination of two columns) key? 【发布时间】:2014-01-01 04:56:03 【问题描述】:**Table 1**
BOOK(bookID,bookEdition,bookName)
其中 (bookID,bookEdition) 的组合用作键
**Table2**
SHELF(id,shelfCode,book)
现在我希望 table2 中的列“book”引用 Table1 中的复合键(bookID,bookEdition)。
任何人都可以请指导我这样做的正确方法是什么。或者如果我的方法有误,请纠正我
或者我们不能给带有复合键的表添加外键约束??
【问题讨论】:
或者总而言之可以如上所述添加外键约束 Table2 中的列book
是什么数据类型?外键匹配两个表中相同数量的列。在您的模型中,book
如何知道它属于哪个bookId
和bookEdition
?
这就是我的问题。 . .数据类型相同,我想添加外键约束,上面提到的场景可以吗??
如果您想从 Table2 FK 到 Table1,请将列 book
替换为 BookId
和 bookEdition
,以便您想要 FK 的列在两个表中。
【参考方案1】:
如果您有一个复合主键(由多个列组成),那么您的所有外键也必须使用 PK 的所有列来引用该表。因此,外键约束只能引用整个键,而不是键的一部分。
要么将bookID
和bookEdition
添加到SHELF
表中(这对我来说更有意义,因为bookID
和bookEdition
一起可以唯一地标识一本书)或者为Book 创建一个单独的主表(使用键 bookID
)并在所有其他表中引用该表。
【讨论】:
以上是关于外键可以引用具有复合(即两列的组合)键的表吗?的主要内容,如果未能解决你的问题,请参考以下文章
复合求和:我想创建一个复合查询,它从两个不同的表中获取两列的单独总和,然后对它们求和