SQL - 外键约束和基数

时间:2014-06-05 22:17:46

标签: sql sqlite cardinality

有人可以解释外键约束和基数吗?我正在阅读SQLite手册,我在advanced foreign key constraint features的部分。在其解释中说:

  

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

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

我在谷歌搜索并没有找到太多。我发现最接近的是Visio 2003的Microsoft页面,其中有一节解释“About attributes, referential integrity, and cardinality”。它说:

  

关系的基数描述了一个记录中有多少记录   父表可以直接与子表中的记录相关。   基数用一对一,一对多,   多对一,或多对多。

这可能是一个非常好的描述,但我仍然不明白SQLite在说父母和子键必须具有相同基数时的含义。如果你能在答案中给出一些也有帮助的例子。感谢

1 个答案:

答案 0 :(得分: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。