Postgresql 外键定义中列的顺序重要吗?

Postgresql 外键定义中列的顺序重要吗?,postgresql,indexing,ddl,Postgresql,Indexing,Ddl,给定以下主键定义,请注意表1中列的顺序: 进一步给出以下外键定义,请注意表2中各列的顺序: 第一个问题 特别是关于以下方面: FOREIGN KEY ("f1","f2","f3","f4") REFERENCES "table1" ("f1","f2","f3","f4"); 列的顺序通常应该与主键定义中列的顺序完全相同吗?如果是,原因是什么?是否会在表2中为此创建索引 第二个问题 特别是关于以下方面: FOREIGN KEY ("f1","f2","f3","f4") REFERENC

给定以下主键定义,请注意表1中列的顺序:

进一步给出以下外键定义,请注意表2中各列的顺序:

第一个问题

特别是关于以下方面:

FOREIGN KEY ("f1","f2","f3","f4")
REFERENCES "table1" ("f1","f2","f3","f4");
列的顺序通常应该与主键定义中列的顺序完全相同吗?如果是,原因是什么?是否会在表2中为此创建索引

第二个问题

特别是关于以下方面:

FOREIGN KEY ("f1","f2","f3","f4")
REFERENCES "table1" ("f1","f2","f3","f4");
列的顺序是否需要与表1主键定义中的顺序匹配,或者这无关紧要,为什么


谢谢

是的,复合外键中的列的顺序应与父表中主键中相应列的顺序相同。如果没有,那么约束将不会像您期望的那样工作。否,表2上的索引不会自动创建,但如果这有助于您的某些查询,您可以创建一个索引。

是的,复合外键中的列的顺序应与父表中主键中的相应列的顺序相同。如果没有,那么约束将不会像您期望的那样工作。不,表2上的索引不会自动创建,但如果这对您的某些查询有帮助,您可以创建一个索引。

如果没有,那么约束将不会像您期望的那样工作-确切地说,在什么意义上?文档中似乎没有提到任何这样的限制。没有,但我把这个问题理解为询问顺序是否需要与父表中主键约束的顺序匹配我认为我们谈论的也不是同一件事。。。我阅读了这个问题,因为我可以声明外键x,y引用父项x,y吗?即使父项声明主键y,x也是如此只要子表的外键和引用子句中的顺序一致,我认为在原始主键约束中声明的顺序是不正确的relevant@user3193317是的,你可以声明,但这并不意味着同一件事,也没有任何意义。但是,Postgres不会阻止您这样做,假设x和y在每个表中都是相同的各自类型。@user3193317:子表可能使用不同的列名,例如外键a、b引用父项x、y,因此它们之间的顺序是唯一的联系。但据我所知,被引用主键中的顺序从来都不相关。如果不相关,那么约束就不会像您期望的那样工作-确切地说,在什么意义上?文档中似乎没有提到任何这样的限制。没有,但我把这个问题理解为询问顺序是否需要与父表中主键约束的顺序匹配我认为我们谈论的也不是同一件事。。。我阅读了这个问题,因为我可以声明外键x,y引用父项x,y吗?即使父项声明主键y,x也是如此只要子表的外键和引用子句中的顺序一致,我认为在原始主键约束中声明的顺序是不正确的relevant@user3193317是的,你可以声明,但这并不意味着同一件事,也没有任何意义。但是,Postgres不会阻止您这样做,假设x和y在每个表中都是相同的各自类型。@user3193317:子表可能使用不同的列名,例如外键a、b引用父项x、y,因此它们之间的顺序是唯一的联系。但据我所知,引用主键中的顺序从来都不相关。