PostgreSQL是ORDBMS的意思是什么?

时间:2017-08-24 15:46:56

标签: postgresql ordbms

Query帮助不大。

如上所述here,PostgreSQL是ORDBMS。

here,它解释了PostgreSQL是RDBMS。

PostgreSQL是一个ORDBMS是什么意思?它是否支持用户定义的数据类型?

1 个答案:

答案 0 :(得分:7)

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

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

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

您甚至可以明确定义这样的表:

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);

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

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

即使表格中没有名为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
);

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