亚洲乱色熟女一区二区三区丝袜,天堂√中文最新版在线,亚洲精品乱码久久久久久蜜桃图片,香蕉久久久久久av成人,欧美丰满熟妇bbb久久久

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

為什么說(shuō)PostgreSQL是面向?qū)ο蟮臄?shù)據(jù)庫(kù)?

admin
2024年3月15日 8:15 本文熱度 1804

PostgreSQL 官方宣稱它是世界上最先進(jìn)的開(kāi)源對(duì)象-關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(ORDBMS)。相信大家對(duì)于關(guān)系型數(shù)據(jù)庫(kù)并不陌生,它基于關(guān)系模型(由行和列組成的二維表),定義了完整性約束并且使用 SQL 作為操作語(yǔ)言。

不過(guò)今天我們的主題不是關(guān)系模型,而是 PostgreSQL 提供的面向?qū)ο筇匦?。面向?qū)ο缶幊蹋∣OP)的三大特性包括數(shù)據(jù)封裝、繼承和多態(tài),那么 PostgreSQL 作為對(duì)象-關(guān)系型數(shù)據(jù)庫(kù),有哪些面向?qū)ο蟮奶匦泽w現(xiàn)呢?

封裝

OOP 將同類對(duì)象(Instance)封裝成類(Class),并且提供方法保護(hù)數(shù)據(jù)的訪問(wèn)。例如以下 Java 示例:

public class Main {
   public static void main(String[] args) {
       Person animal = new Animal();
       animal.setId(1);
       animal.setName("大黃");
       System.out.println(animal.getId() + ", " + animal.getName());
   }
}

class Animal{
   private Integer id;
   private String name;

   public void setId(Integer id){
       this.id = id;
   }

   public String getId(){
       return this.id;
   }

   public void setName(String name){
       this.name = name;
   }

   public Integer getname(){
       return this.name;
   }
   
   public void eat() {  
       System.out.println("The animal eats.");  
   }
}

其中,Animal 是一個(gè)類,包含 id 和 name 屬性,并且通過(guò) getter 和 setter 方法提供數(shù)據(jù)訪問(wèn)。

PostgreSQL 作為數(shù)據(jù)庫(kù),目的就是提供數(shù)據(jù)的存儲(chǔ)和訪問(wèn),其中的關(guān)系(表、索引、序列、視圖、復(fù)合類型等)對(duì)應(yīng)類,數(shù)據(jù)行對(duì)應(yīng)對(duì)象,字段對(duì)應(yīng)對(duì)象的屬性。例如:

CREATE TABLE animal(id integer, name varchar);

INSERT INTO animal(id, name) VALUES (1, '大黃');

SELECT id, name FROM animal;

PostgreSQL 使用 SQL 訪問(wèn)表中的數(shù)據(jù),不同之處在于表中的字段都是 Public 屬性。如果需要實(shí)現(xiàn)數(shù)據(jù)的隱藏,可以通過(guò)表的訪問(wèn)權(quán)限控制,或者利用存儲(chǔ)過(guò)程提供數(shù)據(jù)訪問(wèn)方法。

PostgreSQL 提供了一個(gè)系統(tǒng)表 pg_class,存儲(chǔ)了關(guān)于表、索引、序列、視圖、復(fù)合類型等的元數(shù)據(jù)。

以下是一個(gè)空類,沒(méi)有任何屬性和方法:

class EmptyClass{
}

與此類似,PostgreSQL 可以定義沒(méi)有任何字段的空表:

CREATE TABLE empty_table();

另外,PostgreSQL 不僅支持復(fù)雜的數(shù)據(jù)類型,例如幾何、網(wǎng)絡(luò)、數(shù)組、范圍、XML、JSON 等,而且可以創(chuàng)建自定義的擴(kuò)展類型。下面是一個(gè)自定義復(fù)合類型作為字段類型的示例:

CREATE TYPE people AS (id integer, name varchar);

CREATE TABLE emp(p people);
INSERT INTO emp(p) VALUES ((1,'who'));

SELECT (p).id, (p).name FROM emp;

id|name|
--+----+
1|who |

繼承

OOP 通過(guò)繼承讓子類復(fù)用父類的數(shù)據(jù)和行為,從而實(shí)現(xiàn)代碼的重用。例如:

public class Cat extends Animal {  
   private Integer legs;
   
   @Override
   public void eat() {
       // 覆蓋父類的方法
       System.out.println("The cat eats.");
   }
 
   ...
}

其中,Cat 類繼承了 Animal 類,可以擁有額外的屬性和方法。

PostgreSQL 同樣支持表的繼承,例如:

CREATE TABLE cat(legs integer) INHERITS (animal);

INSERT INTO cat(id, name, legs) VALUES (2, '橘貓', 4);

數(shù)據(jù)表 cat 繼承了數(shù)據(jù)表 animal,并且增加了額外的字段。

PostgreSQL 支持多繼承,子表可以繼承多個(gè)父表。

多態(tài)

OOP 另一個(gè)重要的特性是多態(tài),它可以在運(yùn)行時(shí)根據(jù)對(duì)象的實(shí)際類型來(lái)調(diào)用相應(yīng)的方法。例如:

public class Main {  
   public static void main(String[] args) {
       Animal animal1 = new Animal();  
       animal.eat(); // 輸出 "The animal eats."  
         
       Animal animal2 = new Cat();  
       animal2.eat(); // 輸出 "The cat eats."
   }  
}

其中,animal2 的實(shí)際類型為 Cat,調(diào)用 eat() 方法時(shí),運(yùn)行的是 Cat.eat(),而不是 Animal.eat()。

-- 查詢?nèi)縿?dòng)物
SELECT id, name FROM animal;

id|name|
--+----+
1|大黃 |
2|橘貓 |

-- 只查詢animal
SELECT id, name FROM ONLY animal;
id|name|
--+----+
1|大黃 |

-- 只查詢貓科動(dòng)物
SELECT id, name FROM cat;

id|name|
--+----+
2|橘貓 |

另外,PostgreSQL 函數(shù)也支持重載(Overloading),也就是相同的函數(shù)名具有不同的函數(shù)參數(shù)。例如:

CREATE OR REPLACE FUNCTION add2(p1 integer, p2 integer)
RETURNS integer
AS $$
BEGIN
 return p1+p2;
END; $$
LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION add2(p1 numeric, p2 numeric)
RETURNS numeric
AS $$
BEGIN
 return p1+p2;
END; $$
LANGUAGE plpgsql;

該文章在 2024/3/15 14:49:17 編輯過(guò)
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved