关系模型中的关系是SQL用表表示的关系。我们可以说表是SQL表示关系的尝试。 回到关系,这就是SQL试图用表表示的关系:关系 有一个标题和一个身体。标题是一组属性(SQL 试图表示什么 带列(,每个给定类型。属性由名称和类型名称标识。这 body 是一组元组(SQL 尝试用行表示的内容(。每个元组的标题是 关系的标题。每个元组属性的每个值都是其各自的类型。
我们所说的关系的标题是一组属性,而主体是一组元组是什么意思?
如果我们考虑这两个表:
Employee : EmployeeId,FirstName,LastName,DepartmentId
Department : DepartmentId, DepartmentName, Description
如果我想选择员工及其部门,查询将如下所示:
SELECT * FROM Employee E
LEFT Department D ON E.DepartmentId=D.DepartmentId
在这种情况下,对应于关系的数学定义的标题和正文是什么?
在关系模型中
属性是与数据类型配对的名称。
一组具有唯一名称的属性称为标题。
元组是一组对应于特定标题的属性值。
关系是一组未排序的唯一元组。
元组只有在其标题完全匹配时才能成为关系的一部分。
一组都对应于同一标题的元组称为主体。
因此,关系是特定标题和主体的组合(这是对应于该标题的一组元组(。
在关系数据库中
关系以表的形式实现。
(注意:关系模型将关系中的元组描述为唯一,但据我所知,除非声明唯一键(以主键、唯一约束或唯一索引的形式(,否则没有 RDBMS 强制执行该规则。
标题是表的列定义。
元组是表中的一行。
属性值是特定行中特定列的值。
回答您的问题
在这种情况下,对应于关系的数学定义的标题和正文是什么?
给定您在问题中描述的表,以及用于从这些表中进行选择的查询,该查询的结果集不能被视为关系,因为它的标题中具有重复的属性 -DepartmentId
列存在于两个源表中。
这就是为什么数据库不允许你从这个查询创建视图(或 cte(的原因 - 因为视图或 cte 列名必须是唯一的,才能提供正确的标题。
有关更多信息,请阅读维基百科上的关系(数据库(。