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

时间:2019-02-20 13:50:57

标签: postgresql indexing ddl

给出table1上的以下主键定义(请注意列的顺序):

ALTER TABLE "table1" ADD PRIMARY KEY ("f1", "f4", "f2", "f3");

进一步在table2上给出了以下外键定义(请注意列的顺序):

ALTER TABLE "table2"
  ADD CONSTRAINT "const1"
  FOREIGN KEY ("f1","f2","f3","f4")
  REFERENCES "table1" ("f1","f2","f3","f4");

第一个问题

特别是关于以下行:

FOREIGN KEY ("f1","f2","f3","f4")

列的顺序通常应与主键定义中的列顺序完全相同,如果是,为什么?会在table2上为此创建索引吗?


第二个问题

特别是关于以下行:

REFERENCES "table1" ("f1","f2","f3","f4");

列的顺序是否需要与table1上主键定义中的顺序匹配,或者这无关紧要,为什么?

谢谢

1 个答案:

答案 0 :(得分:0)

是的,复合外键中的列应与父表中主键中的相应列具有相同的顺序。如果不是,则约束将无法按您预期的那样工作。不,不会自动在table2上创建索引,但是如果可以帮助您进行某些查询,则可以创建一个索引。