列约束优于表约束

Eva*_*oll 4 postgresql foreign-key constraint database-internals ddl

除了写作风格之外,还有什么优势吗?

CREATE TABLE foo (
  a int PRIMARY KEY,
  b int
);
Run Code Online (Sandbox Code Playgroud)

进而,

CREATE TABLE bar (
  a int REFERENCES foo,
  c int
);
Run Code Online (Sandbox Code Playgroud)

超过,

BEGIN;
  CREATE TABLE bar (
    a int,
    c int
  );
  ALTER TABLE bar
    ADD FOREIGN KEY (a)
    REFERENCES foo;
COMMIT;
Run Code Online (Sandbox Code Playgroud)

我正在尝试构建一个 DDL 生成器,所以我想知道是否需要支付对列的约束(我之前生成它们的地方),或者将它们全部移到表之外?我知道这些结果产生了相同的表格,我只是想知道引擎盖下是否有任何优势——更少的沃尔玛?等等?

Jas*_*sen 5

两个 DDL 导致相同的数据库结构没有区别。

FOREIGN KEY关系使用复合键时,需要第二种形式(或以下形式)。

CREATE TABLE bar (
    a int,
    c int,
    FOREIGN KEY (a,c) REFERENCES foo(a,c)
);
Run Code Online (Sandbox Code Playgroud)