2014-06-05 134 views
1

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

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

我知道,基数应该是一组值的数量,或者至少是在数学,所以我想,如果我有十个人用柱性爱然后记录每个有两种可能性男和女性,所以假设有一些男性和一些女性的基数是2 ...对不对?

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

关系的基数介绍了如何在 父表中多条记录可以在一个子表直接相关的记录。基数用诸如一对一,一对多,多对一或多对多的术语表示。

这可能是一个相当不错的描述,但我仍然不明白SQLite是什么意思,当它说父键和子键必须具有相同的基数。如果你可以在你的答案中给出一些例子,那也是有帮助的。感谢

+0

这意味着你发布的内容。你正在反思这一点。请记住您帖子中第二个灰色框的最后一句。 –

回答

3

这是示例的表结构:

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。