来自MySQL背景我一直想知道为什么一个表实际上被称为postgresql中的关系。它与SQL:2008 ISO / ANSI标准有关吗?因为它与我和同事们在前几次与postgres相遇时感到困惑。
我在问,因为知道它背后的原因可能会清除某些事情或者可能会使采用变得更容易。
答案 0 :(得分:4)
这源于学者使用的术语,而不是软件工程师使用的术语。您会发现PostgreSQL会发生这种情况,如果您不熟悉它们,它们的文档会让您经常需要技术词典。
数据库的形式语言称为“关系代数”。
正如mark bannister所述,此链接可能对术语有用:
http://en.wikipedia.org/wiki/Relational_databases#Terminology
修改强>
要清楚我的意思是: SQL是由行业编写的标准(Oracle在其中有很大的作用)。 SQL没有提到关系代数,事实上它的起源是一种易于人类可读而非代数的语言。
关系代数通常是学术界的领域,并不是工程界常用的。
与其他实施相比,Posgresql社区与学术界的联系更紧密,似乎他们从关系代数中选择了术语而不是复制工程师。有些人可能认为这是错误的,因为PostgreSQL是 SQL 数据库管理系统,而不是关系数据库管理系统。
答案 1 :(得分:3)
是否与SQL:2008 ISO / ANSI标准有关?
标准SQL规范总是故意避免使用术语“关系”及其衍生物。
根据定义,关系没有重复名称的属性,没有匿名列,没有重复的元组,也没有空值。 SQL表也是如此。如果postgreSQL文档将“relation”等同于“table”,那么他们就会松散地使用这些术语。
答案 2 :(得分:1)
它只是一种命名方式。有些人拥有行和列的表,其他人与元组和属性有关系。它不是特定于postgresql,而且使用这些其他名称暗示了组织表格的某种方式,请参阅维基百科中的“关系模型”。
答案 3 :(得分:-2)
“Relation”实际上涵盖了几种不同类型的数据库对象:表,视图,序列和索引都是关系。您可以从除索引之外的任何一个中进行SELECT。因此,将“关系”视为“可以从中获取数据”的含义,将表和视图视为具有完全不同的实例。
在某种程度上,这也是为什么你可以说“元组”和“属性”而不是“行”和“列”的原因:行和列可以被认为是 table 成分,而元组和属性是更抽象的概念,它们也涵盖了函数或查询输出等内容,它们实际上可能与任何实际行或列不对应。但这与试图区分“字节”和“八位字节”一样令人困惑。
更不用说:在表中,元组不代表行,它代表行版:并使用版本信息和呈现来区分元组它们作为“行”是使表成为表而不仅仅是元组集合的原因。的种类。并且一些元组属性不是列,它们是用于管理版本控制的附加元数据。