关系模型:表还是主键和外键?
Relational model: Tables or primary and foreign keys?
在谈论关系数据库时,似乎大多数人都将主键和外键 'relations' 作为 'relational database' 术语的原因。
这让我很困惑,因为下面链接的教科书明确指出 "A common misconception is that the name "relational" 与 table 之间的关系(即外键)有关。实际上,真正的来源因为模型的名称是数学概念关系。关系模型中的关系是 SQL 所谓的 table。"
此外,下一个来源明确将 table 称为关系,而不是 primary/foreign 键。
https://docs.oracle.com/javase/tutorial/jdbc/overview/database.html
然而,在我看到或读到的任何其他地方,主键和外键都是关系,这似乎是常识。
有没有人知道不一致的原因?
外键约束是一种关系 - 子集关系 - 但这些不是模型名称来源的关系。相反,关系模型的关系指的是有限关系。 Ted Codd
在他 1970 年的论文 A Relational Model of Data for Large Shared Data Banks
中写道 "The term relation is used here in its accepted mathematical sense. Given sets S1, S2, ... Sn (not necessarily distinct), R is a relation on these n sets if it is a set of n-tuples each of which has its first element from S1, its second element from S2, and so on." 因此,如果我们遵循一些规则,例如忽略重复行和行的顺序(毕竟是一组)。
另一个常见的误解是外键约束表示实体之间的关系。他们没有。关系表示为 sets/tables 行关联值。两个或多个实体的键将记录在一行中,无论是在 "entity table" 还是 "relationship table" 中。外键约束只强制完整性,它们不 link 实体或 tables。表可以在任何谓词函数上连接,外键约束在这里不起作用。
大多数人从博客、教程和按受欢迎程度排序的答案中学习数据库概念。大多数人从未读过像样的数据库书籍,更不用说数据关系模型的发明者和学生的论文了。大多数程序员和公司都希望发布产品,但几乎没有时间或欣赏逻辑、理论和哲学。这是一个本质上复杂的领域 - 请参阅 Bill Kent
的书 Data and Reality
了解这种复杂性。因此,当人们试图理解一个困难的话题时,您在 Internet 上找到的大部分内容充其量只是半真半假。
人们熟悉记录和指针,因为它们在主流编程语言中很流行,而且它们看起来和听起来确实很像实体和关系。如果实体用tables/records表示,属性用fields/columns表示,那么实体之间的1对1/1对多关系一定是records/tables之间的关联,对吧?这是一个简单的想法,很难纠正。 object/relational 映射和面向对象域模型的流行源于这个简单的想法(以及来自口才好、善于交际的作者,不像一些关系支持者的粗暴态度),但也进一步巩固了它。
Peter Chen
(The Entity-Relationship Model - Toward a Unified View of Data
的作者努力做到严谨,区分"entity relations"和"relationship relations"。在他看来,实体是现实世界的概念,它们是在数据库中表示为值,并通过行中值的关联来描述。实体之间的关系类似地由行中值的关联表示。E-R 模型对关系和属性的区分有些多余(属性只是二元关系)并且几乎没有有助于区分实体元组和关系元组。事实上,我认为它有助于加强混淆。它与旧网络模型的表面相似性有助于它的采用,但也有助于维护后者,因为开发人员在保持旧做法的同时采用了新术语。
对象角色建模(又名 NIAM,由 Sjir Nijssen
和 Terry Halpin
提出)摒弃了属性并专注于域、角色和关系。它比 E-R 更优雅,更接近真正的关系模型,但它的优点(逻辑性、综合性、远离网络模型)也是它的弱点(学习曲线、更复杂的图表、不太适合作为熟悉技术的工具) .
Ted Codd
在上面提到的论文中评论说 "The network model, on the other hand, has spawned a number of confusions, not the least of which is mistaking the derivation of connections for the derivation of relations." 这在今天和当时一样正确。他描述的关系模型后来被许多其他人建立,包括 Chris Date
,他的书 An Introduction to Database Systems
是该主题最全面的来源之一。
我点名所有这些作者是因为任何一方的多一种意见都不会消除您的困惑。相反,去寻找来源并自己研究它们。是的,这是一项艰苦的工作,但你的努力将在你获得的理解质量中得到回报。
在谈论关系数据库时,似乎大多数人都将主键和外键 'relations' 作为 'relational database' 术语的原因。
这让我很困惑,因为下面链接的教科书明确指出 "A common misconception is that the name "relational" 与 table 之间的关系(即外键)有关。实际上,真正的来源因为模型的名称是数学概念关系。关系模型中的关系是 SQL 所谓的 table。"
此外,下一个来源明确将 table 称为关系,而不是 primary/foreign 键。 https://docs.oracle.com/javase/tutorial/jdbc/overview/database.html
然而,在我看到或读到的任何其他地方,主键和外键都是关系,这似乎是常识。
有没有人知道不一致的原因?
外键约束是一种关系 - 子集关系 - 但这些不是模型名称来源的关系。相反,关系模型的关系指的是有限关系。 Ted Codd
在他 1970 年的论文 A Relational Model of Data for Large Shared Data Banks
中写道 "The term relation is used here in its accepted mathematical sense. Given sets S1, S2, ... Sn (not necessarily distinct), R is a relation on these n sets if it is a set of n-tuples each of which has its first element from S1, its second element from S2, and so on." 因此,如果我们遵循一些规则,例如忽略重复行和行的顺序(毕竟是一组)。
另一个常见的误解是外键约束表示实体之间的关系。他们没有。关系表示为 sets/tables 行关联值。两个或多个实体的键将记录在一行中,无论是在 "entity table" 还是 "relationship table" 中。外键约束只强制完整性,它们不 link 实体或 tables。表可以在任何谓词函数上连接,外键约束在这里不起作用。
大多数人从博客、教程和按受欢迎程度排序的答案中学习数据库概念。大多数人从未读过像样的数据库书籍,更不用说数据关系模型的发明者和学生的论文了。大多数程序员和公司都希望发布产品,但几乎没有时间或欣赏逻辑、理论和哲学。这是一个本质上复杂的领域 - 请参阅 Bill Kent
的书 Data and Reality
了解这种复杂性。因此,当人们试图理解一个困难的话题时,您在 Internet 上找到的大部分内容充其量只是半真半假。
人们熟悉记录和指针,因为它们在主流编程语言中很流行,而且它们看起来和听起来确实很像实体和关系。如果实体用tables/records表示,属性用fields/columns表示,那么实体之间的1对1/1对多关系一定是records/tables之间的关联,对吧?这是一个简单的想法,很难纠正。 object/relational 映射和面向对象域模型的流行源于这个简单的想法(以及来自口才好、善于交际的作者,不像一些关系支持者的粗暴态度),但也进一步巩固了它。
Peter Chen
(The Entity-Relationship Model - Toward a Unified View of Data
的作者努力做到严谨,区分"entity relations"和"relationship relations"。在他看来,实体是现实世界的概念,它们是在数据库中表示为值,并通过行中值的关联来描述。实体之间的关系类似地由行中值的关联表示。E-R 模型对关系和属性的区分有些多余(属性只是二元关系)并且几乎没有有助于区分实体元组和关系元组。事实上,我认为它有助于加强混淆。它与旧网络模型的表面相似性有助于它的采用,但也有助于维护后者,因为开发人员在保持旧做法的同时采用了新术语。
对象角色建模(又名 NIAM,由 Sjir Nijssen
和 Terry Halpin
提出)摒弃了属性并专注于域、角色和关系。它比 E-R 更优雅,更接近真正的关系模型,但它的优点(逻辑性、综合性、远离网络模型)也是它的弱点(学习曲线、更复杂的图表、不太适合作为熟悉技术的工具) .
Ted Codd
在上面提到的论文中评论说 "The network model, on the other hand, has spawned a number of confusions, not the least of which is mistaking the derivation of connections for the derivation of relations." 这在今天和当时一样正确。他描述的关系模型后来被许多其他人建立,包括 Chris Date
,他的书 An Introduction to Database Systems
是该主题最全面的来源之一。
我点名所有这些作者是因为任何一方的多一种意见都不会消除您的困惑。相反,去寻找来源并自己研究它们。是的,这是一项艰苦的工作,但你的努力将在你获得的理解质量中得到回报。