2

有人可以解释外键约束和基数吗?我正在阅读 SQLite 手册,并且在高级外键约束功能部分。在其解释中说:

父键和子键必须具有相同的基数。在 SQLite 中,如果任何子键列(在本例中为 songartist 和 songalbum)为 NULL,则不需要父表中的相应行。

我知道基数应该是一组值的数量,或者至少是数学上的,所以我假设如果我有十个人记录,每个记录都有一列性别,那么有男性和女性两种可能性,所以假设有一些男性和一些女性的基数是 2... 对吗?

我在谷歌上搜索并没有找到太多。我发现的最接近的是 Visio 2003 的 Microsoft 页面,其中有一个部分解释了“关于属性、引用完整性和基数”。它说:

关系的基数描述了父表中有多少记录可以与子表中的记录直接相关。基数以一对一、一对多、多对一或多对多等术语表示。

这可能是一个很好的描述,但是当 SQLite 说父键和子键必须具有相同的基数时,我仍然不明白 SQLite 是什么意思。如果您可以在答案中举一些例子,那也会有所帮助。谢谢

4

1 回答 1

4

这是示例的表结构:

CREATE TABLE album(
  albumartist TEXT,
  albumname TEXT,
  albumcover BINARY,
  PRIMARY KEY(albumartist, albumname)
);

CREATE TABLE song(
  songid     INTEGER,
  songartist TEXT,
  songalbum TEXT,
  songname   TEXT,
  FOREIGN KEY(songartist, songalbum) REFERENCES album(albumartist, albumname)
);

父表 ( album) 有一个复合主键,即主键由两列组成。

因此,如果子表想要引用专辑,它也必须使用两列。

在这种情况下,父键和子键的基数均为 2。

于 2014-06-06T07:04:51.540 回答