对于家庭作业,我已经下载了 imdb 数据集,并使用 DBeaver 将其导入到 PostgreSQL 中的新表中。一些表具有外键数组。例如,
name.basics 表包含有关演员的信息
nconst primaryName birthYear deathYear primaryProfession knownForTitles
nm0000001 Fred Astaire 1899 1987 soundtrack,actor,miscellaneous tt0027125,tt0053137,tt0050419,tt0072308
在上面,knownForTitles 字段引用 title.basics 表中的主键,该表列出了有关电影的信息。
tconst titleType primaryTitle originalTitle isAdult startYear endYear runtimeMinutes genres
tt0000001 short Carmencita Carmencita 0 1894 \N 1 Documentary,Short
我是否能够在knownForTitles 字段中的name.basics 中创建指向title.basics 主键列的外键数组?我尝试设置一个列,其中包含指向 title.basics 主键的 varchar 数组,但出现此错误:
详细信息:关键列“knownfortitles”和“tconst”是不兼容的类型:character Varying[]和character Varying。
我知道通常会使用联结表来处理这样的关系,但对于这个家庭作业,我试图了解是否可以使用包含外键数组的字段来处理这种关系。如果是这样,我该如何设置?
如果您使用标识符数组,则 PostgreSQL 中不能有外键约束。已经有一个补丁来实现该功能,但从未应用过。
以这种方式使用数组不仅会妨碍您获得引用完整性,还会使连接变得复杂且缓慢。您应该避免此类数据模型。