PostgreSQL to be ORDBMS 是什么意思?

What does PostgreSQL to be ORDBMS mean?

提问人:overexchange 提问时间:8/24/2017 最后编辑:overexchange 更新时间:8/25/2017 访问量:11187

问:

查询没有多大帮助。

如上所述,PostgreSQL 是 ORDBMS。

在这里,它解释了 PostgreSQL 是 RDBMS。


PostgreSQL 是 ORDBMS 是什么意思?是关于支持用户定义的数据类型吗?

PostgreSQL 命令

评论

3赞 8/24/2017
RDBMS 和 ORDBMS 之间的差异可能重复
1赞 overexchange 8/25/2017
@RC。我读了 100 遍这个查询。它只是一本英语文学,无济于事。该引用的查询有投票,但没有答案。确定您从该查询中一无所获。
0赞 t.niese 8/25/2017
Postgres 允许在查询中使用存储在 JSON 列中的 JSON 对象的 properites。JSON数据列是一种复杂的数据类型,不再是关系型的,所以我想说这至少是它不再是纯粹的关系数据库的原因之一。
0赞 overexchange 8/25/2017
@t.niese 所以,你的意思是,ORDBMS是关于支持用户定义类型的数据库?
0赞 t.niese 8/25/2017
JSON 不是用户定义的类型,而是由数据库定义的类型。但是,能够在 json 对象中查询数据并不是一个与关系数据库匹配的功能,因为它是一种复杂的数据类型。这不是关于类型是否是用户定义的,而是关于类型的类型。

答:

38赞 user330315 8/25/2017 #1

ORDBMS 主要是一个关系数据库,它支持一些面向对象的功能。

PostgreSQL 或 Postgres(不是 PostGres)支持表继承和函数重载。两者都是通常归因于面向对象语言的功能。

面向对象的方法可见的情况之一是,对于每个表,都创建了相应的数据类型。因此,表本质上是一组特定类型的“实例”。

您甚至可以像这样显式定义表:

create type person_type as (id integer, firstname text, lastname text);
create table person of person_type;

只有表类型支持类型继承,而基类型不支持类型继承:

create table person (id integer, firstname text, lastname text);
create table person_with_dob
( 
   dob date
) inherits (person);

然而,这并不是完全面向对象的,因为类型定义缺乏在类型(=class)上定义方法的能力,包括方法可见性。最接近类型方法的是以该类型为参数的函数:

create table person (id integer, firstname text, lastname text);

create function fullname(p_row person) returns text
as
$$
  select concat_ws(' ', p_row.firstname, p_row.lastname);
$$ 
language sql;

insert into person (id, firstname, lastname) values (42, 'Arthur', 'Dent');

现在,您可以运行:

select p.fullname
from person p;

它返回:

fullname   
-----------
Arthur Dent

即使表中没有命名的列 person。这种行为最接近面向对象语言中的真实类/类型方法(但它不是一回事,因为它仍然缺乏定义私有方法的能力)fullname


创建用户定义的结构化数据类型通常也被视为面向对象的功能:

create type address_type (city text, zipcode text, street text);

create table person
(
  id integer primary key,
  firstname text,
  lastname text, 
  billing_address address_type, 
  shipping_address address_type
);

数组也可以看作是“对象集”,但这不一定是面向对象的功能。

评论

0赞 overexchange 8/25/2017
1)如果我们谈论表继承和函数重载,那么,OODBMS与ORDBMS有何不同?2)在关系模型中,表表示数学关系。如果将表视为可以继承的对象,那么关系模型是否仍然有效?
0赞 8/25/2017
@overexchange:纯面向对象的数据库不支持关系特性,主要是没有像SQL这样的查询语言