【问题标题】:What is adding a new relationship to an existing table called?什么是向现有表添加新关系称为?
【发布时间】:2017-11-13 15:19:18
【问题描述】:

在数据库术语中,当我添加一个新的外键,为该外键插入一条记录并更新现有记录时,这个过程叫什么?我的目标是能够更有效地找到答案。

//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;

【问题讨论】:

  • 为什么投反对票?

标签: mysql relational-database terminology


【解决方案1】:

您似乎正在用一个代理标识符替换另一个。引入代理键有时(错误地)称为规范化,因此您可能会在该术语上获得一些成功。

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

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

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

如果您的意思是引入代理键作为原始属性转移到的新实体集的标识符,这类似于 Peter Chen 所说的将值集从较低的概念域转移到较高的概念域域。您可以在他的论文“实体关系模型 - 企业数据视图的基础”中找到更多信息。

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

【讨论】:

  • 看来我没有给出合适的例子,example_referenced_table通常会包含除id之外的更多字段。该示例只是举例说明了链接过程。
  • > “虽然该措辞混合了概念和物理术语” 详细说明?
  • 实体关系模型是概念数据模型,提供了一个相当直观(但逻辑上不完整)的学科来组织知识,类似于主题领域的本体。然后将 ER 模型映射到由表(物理数据模型)表示的关系(逻辑数据模型)。因此,说您正在向表添加关系是混合了不同级别的描述。从物理上讲,我们会在现有或新表中添加列来表示新关系。
猜你喜欢
  • 1970-01-01
  • 2013-03-30
  • 2013-02-20
  • 1970-01-01
  • 2014-11-06
  • 1970-01-01
  • 1970-01-01
  • 2017-03-06
  • 2015-06-17
相关资源
最近更新 更多