gpt4 book ai didi

postgresql - PostgreSQL 成为 ORDBMS 是什么意思?

转载 作者:行者123 更新时间:2023-11-29 11:30:46 29 4
gpt4 key购买 nike

Query没有太大帮助。

如前所述here , PostgreSQL 是 ORDBMS。

here ,它解释了 PostgreSQL 是 RDBMS。


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

最佳答案

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

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

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 的列。这种行为最接近面向对象语言中的真实类/类型方法(但它不是一回事,因为它仍然缺乏定义例如私有(private)方法的能力)


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

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

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

关于postgresql - PostgreSQL 成为 ORDBMS 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45865961/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com