我认为“关系”一词的最佳答案很好,尤其是在理论上谈论数据库时。但在实践中,我认为在谈论实际的数据库系统实现时并不合适。原因是在实际的数据库系统实现中存在很多结构,并且在数据库理论中没有讨论或涵盖的实现中存在差异。这方面的示例可能包括存储过程、表变量、表值函数OPENQUERY()(在 Microsoft SQL Server 实现中)、CTE、子查询等。
正如这篇文章中的许多讨论所表明的那样,似乎不同的人对他们认为是关系的附加物理构造有不同的解释,但数据库理论并不知道这些构造。我认为 OP 的问题非常广泛,这引发了此处显示的广泛响应,但我认为其中大多数都公平地取决于您想要发言的上下文。
话虽这么说,这就是为什么我相信以下在以物理形式谈论这些构造时也是正确答案的原因。当一个表存在于数据库系统中时,它是具体的,在很大程度上它是一个对象的实例,例如正在运行的应用程序中的数据集合对象,这里的数据库系统是正在运行的应用程序。当在实际数据库系统实现的上下文中引用它们时,可以返回“表格数据”(如 OP 所用)的其他物理实现的构造,例如表值函数或表变量也可以被视为对象. 我可以谈论这些与它们可以持有/返回的数据(关系)集脱节的构造,并专注于它们作为物理对象的存在,如果这是我选择谈论它们的上下文的话。
这就是为什么我喜欢 Brendan 对“数据库对象”一词的回答。我也不会排除“实体”这个词。
我相信,诸如 Microsoft 的实体框架之类的 ORM 将所有数据库对象(表、视图、存储过程等)视为实体。这是在实际实例化之前在结构上表示对象(通常作为类)的模型的上下文中。
因此,就个人而言,当我在 sed 模型实例化之前或更进一步上游(例如通过数据库图定义逻辑模式时)谈论逻辑概念时,我喜欢使用术语实体。我认为实体是描述事物结构的好术语,无需物理实现。
Postgres(以及关系代数)称它们为关系- 您可以从中查询的行和列的表格事物。这包括表、视图、物化视图、临时表,甚至临时查询结果。
如果你真的只指关系,我会避免使用术语“数据库对象”,因为“数据库对象”还包括模式、索引、用户、序列、策略、列定义、类型、函数等等。数据库对象是用DDL操作的对象,而(其中的数据)关系是用DML操作的。
“具有列和行的事物”是一个关系。这是 Codd 在他的开创性论文中使用的词,开启了 RDBM 革命。
“可以改变但保留其身份的事物” - 是一个实体。当您可以找到代表它的唯一键时,关系的单行代表一个实体。如果您有两个非唯一的列:
event
和date
- 行将不会形成实体,因为更改任一属性都会完全改变行的含义。如果您添加一个额外的列(如id
)或者如果您使date
唯一的,您将获得作为实体工作的行(无论它是视图或表,还是连接的结果)。数据库对象就是这样:由您的数据库服务器管理的事物。它可以是表或视图,但也可以是用户或存储过程。
结果是API(例如JDBC)的一部分的名称,它在某些其他编程环境(例如Java 运行时)中表示您的结果(可能是关系或游标)。
但事实是——在真正的专业环境中,任何事情都会发生。人们把这些词弄混了,通常不在乎。咳咳,我不在乎。
放
回到基础,表是一组记录。视图是一个虚拟表,无论是计算的还是物化的,这意味着它仍然只是一组记录。
表源
Microsoft 文档在 BNF 中使用 <table_source> 来指示行的任何来源 - 表或视图或许多表值函数之一。
只是“桌子”:-)
我在课堂上使用这个词已经很多年了,没有混淆。
大多数时候,与您交谈的人并不理解或关心表格或视图之间的区别。没错——他们只需要知道“我从哪里获取数据来完成我的工作?”
只需解释一下,“这是一个表格列表,请选择您需要的那个。” 当然,您并没有用一些愚蠢的小玩意来不同地命名表和视图,对吧……?
怎么样
Tabular
?它意味着“表格性”,这意味着它像表格一样工作,具有表格的特征,但不一定是表格。来自技术百科
数据库对象
关系数据库中的数据库对象是一种用于存储或引用数据的数据结构。人们与之交互的最常见的对象是桌子。其他对象是索引、存储过程、序列、视图等等。
创建数据库对象时,无法创建新的对象类型,因为创建的所有各种对象类型都受到所使用的关系数据库模型(例如 Oracle、SQL Server 或 Access)的本质或源代码的限制。正在创建的是对象的实例,例如新表、该表上的索引或同一表上的视图。
补充参考...
SQL Server 对象
Oracle 数据库对象
我认为“关系”一词的最佳答案很好,尤其是在理论上谈论数据库时。但在实践中,我认为在谈论实际的数据库系统实现时并不合适。原因是在实际的数据库系统实现中存在很多结构,并且在数据库理论中没有讨论或涵盖的实现中存在差异。这方面的示例可能包括存储过程、表变量、表值函数
OPENQUERY()
(在 Microsoft SQL Server 实现中)、CTE、子查询等。正如这篇文章中的许多讨论所表明的那样,似乎不同的人对他们认为是关系的附加物理构造有不同的解释,但数据库理论并不知道这些构造。我认为 OP 的问题非常广泛,这引发了此处显示的广泛响应,但我认为其中大多数都公平地取决于您想要发言的上下文。
话虽这么说,这就是为什么我相信以下在以物理形式谈论这些构造时也是正确答案的原因。当一个表存在于数据库系统中时,它是具体的,在很大程度上它是一个对象的实例,例如正在运行的应用程序中的数据集合对象,这里的数据库系统是正在运行的应用程序。当在实际数据库系统实现的上下文中引用它们时,可以返回“表格数据”(如 OP 所用)的其他物理实现的构造,例如表值函数或表变量也可以被视为对象. 我可以谈论这些与它们可以持有/返回的数据(关系)集脱节的构造,并专注于它们作为物理对象的存在,如果这是我选择谈论它们的上下文的话。
这就是为什么我喜欢 Brendan 对“数据库对象”一词的回答。我也不会排除“实体”这个词。
我相信,诸如 Microsoft 的实体框架之类的 ORM 将所有数据库对象(表、视图、存储过程等)视为实体。这是在实际实例化之前在结构上表示对象(通常作为类)的模型的上下文中。
因此,就个人而言,当我在 sed 模型实例化之前或更进一步上游(例如通过数据库图定义逻辑模式时)谈论逻辑概念时,我喜欢使用术语实体。我认为实体是描述事物结构的好术语,无需物理实现。
但是当谈到具体的表示时,例如应用程序中的 Table 对象的实例,或者数据库层中具体编译的 Table,那么我认为数据库对象也是一个很好的术语。