Sql 数据库中的外键可以引用多个元素吗?

Sql 数据库中的外键可以引用多个元素吗?,sql,django,postgresql,foreign-keys,primary-key,Sql,Django,Postgresql,Foreign Keys,Primary Key,我正试图用Django/PostgreSQL建立一个数据库,但我不知道这是否是我能做的。在我的表中,我希望有各种元素,每个元素都有主键字段,但同时,在同一个表中,每个元素都有一个列,该列将有一个外键约束,该约束引用这些元素的主键列表。所以它必须看起来像这样: |_pk_|_x_|_y_|_dependencies_| |pk1 |---|---| [pk2,pk3] | |pk2 |---|---|--------------| |pk3 |---|---|--------------|

我正试图用Django/PostgreSQL建立一个数据库,但我不知道这是否是我能做的。在我的表中,我希望有各种元素,每个元素都有主键字段,但同时,在同一个表中,每个元素都有一个列,该列将有一个外键约束,该约束引用这些元素的主键列表。所以它必须看起来像这样:

|_pk_|_x_|_y_|_dependencies_|
|pk1 |---|---|   [pk2,pk3]  |
|pk2 |---|---|--------------|
|pk3 |---|---|--------------|
我不明白的是,外键列是否可以引用多个主键,因为在Django中,如果我必须引用同一个表,我只会说models.ForeignKey('self'),这会自动引用同一个表的主键,但我需要它来引用多个主键(甚至没有,这取决于具体项目)

这是否可行?是否可以设计一种方法,使用相同的引用,但使用多个表


提前感谢您的帮助!

是的。下面是一个示例

CONSTRAINT fk_t1_t2 FOREIGN KEY (refcol1, refcol2)
                    REFERENCES table2(col1, col2)

Django中的
ForeignKey
中不能引用多个字段

您是否考虑过使用
ManyToManyField

它创建一个中间表,允许对该元素进行任意数量的引用


如果您不想这样做,您也可以使用CSV字段(或1.8中的新postgres特定字段)但是,您必须自己进行约束验证…

听起来您需要与self建立多对多关系。我尝试使用多对多字段,但在创建中间表时,它还会为我需要的每个引用向表中添加一行,这很快就会成为我的一个问题,因为我需要很多这样的引用。我有没有办法强迫Django将对同一个键的所有引用分组到一行中,可能是使用ArrayField或ListField?为什么这会很快成为问题?我敢打赌,在m2m表中安装了数以百万计的条目,仍然可以正常工作。但是如果没有办法,您需要做后一件事,即自我验证在我看来,保存在.Intermediate表中的约束不是问题。在关系数据库中,如果不明确定义什么是关系,就不可能有m2m关系。这就是为什么它被称为关系数据库,对吗?我担心的是,由于主表将有大约500000个条目开始,m2m表可能会令人不快地升级到数千万条。但目前这种方法正在发挥作用,所以非常感谢您指出这一点。