PostgreSQL:更改表添加约束外键与表中定义的外键



我正在读取现有Web应用程序的迁移:

...
create table BillableTime (
    id int8 not null,
    ...
    project int8,
    primary key (id),
    unique (employee, project, date)
);
...
create table Project (
    id int8 not null,
    ...
    primary key (id)
);
...
alter table BillableTime
    add constraint FK3EBA06E37BE2CBE
    foreign key (project)
    references Project;

我不明白两件事:1)为什么不只使用一个简单的参考声明

create table BillableTime (
    id int8 not null,
    ...
    project int8 REFERENCES project (id),
    primary key (id),
    unique (employee, project, date)
);

他们的方法有什么好处?

2)为什么约束名称如此奇怪:FK3EBA06E37BE2CBE?这有什么原因吗?

1)为什么不只使用一个简单的参考声明

您的ORM可能也适用于MySQL,并且MySQL忽略了内联外键声明,因此您必须进行很长的路要走。

创建表时支持添加外键和稍后添加外键的代码较少。

2)为什么约束名称如此奇怪:FK3EBA06E37BE2CBE?有没有 原因呢?

它可能是引用和引用的表和列名称的哈希值。不要忘记,有时您需要删除外键,并且必须按名称执行此操作。我想这会稍微容易一些。

约束的名称非常奇怪,很可能是使用 ORM 的结果。我相信,约束的名称在整个数据库中必须是唯一的......因此,提供名称的ORM旨在确保唯一性。并参考您问题的第一部分 - 这是ORM迁移系统实现的结果 - 它生成两个语句而不是一个......以这种方式实现一定更容易 - 对于 Postgres - 它的作用完全相同

最新更新