我正在阅读现有网络应用的迁移:
...
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
?
这有什么理由吗?
答案 0 :(得分:0)
由于使用ORM,约束的名称很可能很奇怪。我相信,约束的名称在整个数据库中必须是唯一的...所以提供名称的ORM旨在确保唯一性。 并且参考问题的第一部分 - 这是ORM迁移系统实现的结果 - 它生成两个语句而不是一个...它必须更容易实现这种方式 - 对于Postgres - 它完全相同
答案 1 :(得分:0)
1)为什么不使用简单的参考声明
您的ORM也可能与MySQL一起使用,并且MySQL忽略内联外键声明,因此您必须做很长时间。
在创建表并稍后添加外键时,支持添加外键的代码较少。
2)为什么约束名称如此奇怪:FK3EBA06E37BE2CBE?有没有 原因是什么?
它可能是引用和引用的表和列名称的哈希。别忘了有时你需要DROP外键,你必须按名称这样做。这会让我觉得稍微容易一些。