PostgreSQL 成为 ORDBMS 是什么意思?
What does PostgreSQL to be ORDBMS mean?
帮助不大。
如前所述here,PostgreSQL 是 ORDBMS。
here,它解释了 PostgreSQL 是 RDBMS。
PostgreSQL 是一个 ORDBMS 是什么意思?是关于支持用户定义的数据类型吗?
ORDBMS 主要是一个关系 数据库,它支持一些 面向对象的特性。
PostgreSQL 或 Postgres (not PostGres) 支持 table 继承和函数重载。两者都是通常归因于面向对象语言的功能。
面向对象方法可见的一种情况是,对于每个 table,都会创建一个相应的数据类型。因此,table 本质上是一组特定类型的 "instances"。
您甚至可以像这样显式定义 table:
create type person_type as (id integer, firstname text, lastname text);
create table person of person_type;
类型继承仅支持 table 类型,不支持基类型:
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;
它 returns:
fullname
-----------
Arthur Dent
即使 table 人中没有名为 fullname
的列。这种行为最接近面向对象语言中的真实 class/type 方法(但它不是一回事,因为它仍然缺乏定义例如私有方法的能力)
创建用户定义的结构化数据类型通常也被视为面向对象的功能:
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
);
数组也可以看作是 "sets of objects" 但这不一定是面向对象的特性。
如前所述here,PostgreSQL 是 ORDBMS。
here,它解释了 PostgreSQL 是 RDBMS。
PostgreSQL 是一个 ORDBMS 是什么意思?是关于支持用户定义的数据类型吗?
ORDBMS 主要是一个关系 数据库,它支持一些 面向对象的特性。
PostgreSQL 或 Postgres (not PostGres) 支持 table 继承和函数重载。两者都是通常归因于面向对象语言的功能。
面向对象方法可见的一种情况是,对于每个 table,都会创建一个相应的数据类型。因此,table 本质上是一组特定类型的 "instances"。
您甚至可以像这样显式定义 table:
create type person_type as (id integer, firstname text, lastname text);
create table person of person_type;
类型继承仅支持 table 类型,不支持基类型:
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;
它 returns:
fullname
-----------
Arthur Dent
即使 table 人中没有名为 fullname
的列。这种行为最接近面向对象语言中的真实 class/type 方法(但它不是一回事,因为它仍然缺乏定义例如私有方法的能力)
创建用户定义的结构化数据类型通常也被视为面向对象的功能:
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
);
数组也可以看作是 "sets of objects" 但这不一定是面向对象的特性。