什么是将新关系添加到名为?

时间:2017-06-12 08:14:43

标签: mysql relational-database terminology

在数据库方面,当我添加一个新外键时,插入该外键的记录并更新现有记录,该进程调用了什么?我的目标是能够更有效地找到答案。

//create temporary linking key
alter table example add column example_foreign_key int unsigned null;

//contains more fields
insert into example_referenced_table (example_id, ...) 
select id, ... 
from example 
join ...;

//link with the table
update example join example_referenced_table on example_id = example.id
set example.example_foreign_key = example_referenced_table.id;

//drop linking key
alter table example_referenced_table drop column example_id;

1 个答案:

答案 0 :(得分:1)

看起来你正在用一个代理标识符代替另一个代理标识符。引入代理键有时(错误地)称为规范化,因此您可能会对该术语进行一些点击。

在极少数情况下,规范化需要引入代理键,但在大多数情况下,它只是将关系(表)分解为两个或更多,这样就不会丢失任何信息。

当自然键或候选键不存在,不方便或不受支持时,通常使用代理键(例如,复合键通常是对象关系映射器的问题)。有关选择好主键的标准,请参阅:What are the design criteria for primary keys

将一个代理标识符替换为另一个代理标识符几乎没有价值,因此,据我所知,您演示的过程没有正确的名称,至少在关系模型中是这样。

如果您要将代理键引入作为原始属性转移到的新实体集的标识符,那就接近于Peter Chen所称的将值集从下层概念域转移到上层概念域。您可以在他的论文“实体 - 关系模型 - 企业数据视图的基础”中找到更多信息。

至于你的问题的标题,说你在表中添加一个关系并没有错(尽管这个措辞混合了概念和物理术语),但请注意,在实体 - 关系模型中,关系由表中的两个或多个实体键(例如示例表中的arr2)而不是表之间的外键约束。关系与外键约束的关联来自网络数据模型,它比关系模型和实体关系模型都要旧。