postgresql:alter table add constraint外键与表中定义的外键

时间:2015-04-14 19:36:54

标签: sql postgresql

我正在阅读现有网络应用的迁移:

...
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? 这有什么理由吗?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

  

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

您的ORM也可能与MySQL一起使用,并且MySQL忽略内联外键声明,因此您必须做很长时间。

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

  

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

它可能是引用和引用的表和列名称的哈希。别忘了有时你需要DROP外键,你必须按名称这样做。这会让我觉得稍微容易一些。