国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

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

這篇具有很好參考價(jià)值的文章主要介紹了為什么說(shuō)PostgreSQL是面向?qū)ο蟮臄?shù)據(jù)庫(kù)?。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

PostgreSQL 官方宣稱它是世界上最先進(jìn)的開源對(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è)空類,沒有任何屬性和方法:

class EmptyClass{
}

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

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ù)。例如:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-843369.html

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;

到了這里,關(guān)于為什么說(shuō)PostgreSQL是面向?qū)ο蟮臄?shù)據(jù)庫(kù)?的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 說(shuō)說(shuō)為什么要做數(shù)據(jù)庫(kù)拆分

    說(shuō)說(shuō)為什么要做數(shù)據(jù)庫(kù)拆分

    單體項(xiàng)目在構(gòu)建之初,數(shù)據(jù)庫(kù)的負(fù)載和數(shù)據(jù)量都不大,所以不需要對(duì)數(shù)據(jù)庫(kù)做拆分,小型財(cái)務(wù)系統(tǒng)、文書系統(tǒng)、ERP系統(tǒng)、OA系統(tǒng),用一個(gè)MySQL數(shù)據(jù)庫(kù)實(shí)例基本就夠用了。 就像《淘寶技術(shù)這十年》里面說(shuō)到的,電商業(yè)務(wù)的數(shù)據(jù)量增長(zhǎng)飛快,所以最開始的PHP+MySQL的架構(gòu)已經(jīng)不能滿

    2024年02月08日
    瀏覽(25)
  • Elasticsearch:什么是向量和向量存儲(chǔ)數(shù)據(jù)庫(kù),我們?yōu)槭裁搓P(guān)心?

    Elasticsearch:什么是向量和向量存儲(chǔ)數(shù)據(jù)庫(kù),我們?yōu)槭裁搓P(guān)心?

    Elasticsearch 從 7.3 版本開始支持向量搜索。從 8.0 開始支持帶有 HNSW 的 ANN 向量搜索。目前 Elasticsearch 已經(jīng)是全球下載量最多的向量數(shù)據(jù)庫(kù)。它允許使用密集向量和向量比較來(lái)搜索文檔。 向量搜索在人工智能和機(jī)器學(xué)習(xí)領(lǐng)域有許多重要的應(yīng)用。 有效存儲(chǔ)和檢索向量的數(shù)據(jù)庫(kù)對(duì)于

    2024年02月08日
    瀏覽(31)
  • 什么是 Java 中的數(shù)據(jù)庫(kù)連接池?為什么使用連接池來(lái)管理數(shù)據(jù)庫(kù)連接?

    什么是 Java 中的數(shù)據(jù)庫(kù)連接池?為什么使用連接池來(lái)管理數(shù)據(jù)庫(kù)連接?

    數(shù)據(jù)庫(kù)連接池(database connection pool)是在 Java 中用于管理數(shù)據(jù)庫(kù)連接的一種技術(shù)。它的主要目的是提高數(shù)據(jù)庫(kù)連接的重用性和性能。在傳統(tǒng)的數(shù)據(jù)庫(kù)連接方式中,每次與數(shù)據(jù)庫(kù)建立連接時(shí)都需要進(jìn)行一系列的網(wǎng)絡(luò)通信和身份驗(yàn)證操作,這樣的開銷較大并且會(huì)影響應(yīng)用程序的性

    2024年02月06日
    瀏覽(33)
  • 為什么數(shù)據(jù)庫(kù)要允許沒有主鍵的表存在

    在數(shù)據(jù)庫(kù)設(shè)計(jì)中,主鍵是一個(gè)關(guān)鍵概念,用于唯一標(biāo)識(shí)數(shù)據(jù)庫(kù)表中的每一行數(shù)據(jù)。然而,有時(shí)候數(shù)據(jù)庫(kù)允許沒有主鍵的表存在的情況,這可能會(huì)引起一些爭(zhēng)議和疑問(wèn)。本文將探討為什么數(shù)據(jù)庫(kù)允許沒有主鍵的表以及相關(guān)的考慮因素。 主鍵在數(shù)據(jù)庫(kù)中具有以下作用: 唯一標(biāo)識(shí)

    2024年02月08日
    瀏覽(31)
  • AIGC基礎(chǔ):大型語(yǔ)言模型 (LLM) 為什么使用向量數(shù)據(jù)庫(kù),嵌入(Embeddings)又是什么?

    嵌入: 它是指什么?嵌入是將數(shù)據(jù)(例如文本、圖像或代碼)轉(zhuǎn)換為高維向量的數(shù)值表示。這些向量捕捉了數(shù)據(jù)點(diǎn)之間的語(yǔ)義含義和關(guān)系??梢詫⑵淅斫鉃閷?fù)雜數(shù)據(jù)翻譯成 LLM 可以理解的語(yǔ)言。 為什么有用?原始數(shù)據(jù)之間的相似性反映在高維空間中對(duì)應(yīng)向量之間的距離上。

    2024年02月21日
    瀏覽(101)
  • 數(shù)據(jù)庫(kù)——Redis 沒有使用多線程?為什么不使用多線程?

    數(shù)據(jù)庫(kù)——Redis 沒有使用多線程?為什么不使用多線程?

    雖然說(shuō) Redis 是單線程模型,但是, 實(shí)際上, Redis 在 4.0 之后的版本中就已經(jīng)加入了對(duì)多線程的支持。 不過(guò),Redis 4.0 增加的多線程主要是針對(duì)一些大鍵值對(duì)的刪除操作的命令,使用這些命令就會(huì)使用主處理之外的其他線程來(lái)“異步處理”。 大體上來(lái)說(shuō), Redis 6.0 之前主要還是

    2024年02月11日
    瀏覽(31)
  • 數(shù)據(jù)庫(kù)為什么使用B+樹而不是B樹做索引

    數(shù)據(jù)庫(kù)為什么使用B+樹而不是B樹做索引

    ??作者簡(jiǎn)介,黑夜開發(fā)者,CSDN領(lǐng)軍人物,全棧領(lǐng)域優(yōu)質(zhì)創(chuàng)作者?,CSDN博客專家,阿里云社區(qū)專家博主,2023年6月CSDN上海賽道top4。 ??數(shù)年電商行業(yè)從業(yè)經(jīng)驗(yàn),歷任核心研發(fā)工程師,項(xiàng)目技術(shù)負(fù)責(zé)人。 ??本文已收錄于PHP專欄:MySQL的100個(gè)知識(shí)點(diǎn)。 ??歡迎 ??點(diǎn)贊?評(píng)論?收

    2024年02月10日
    瀏覽(23)
  • Facebook 用戶量十分龐大,為什么還使用 MySQL 數(shù)據(jù)庫(kù)?

    Facebook 用戶量十分龐大,為什么還使用 MySQL 數(shù)據(jù)庫(kù)?

    當(dāng)談到社交媒體巨頭Facebook時(shí),我們立刻想到的是其龐大的用戶基礎(chǔ)和每日海量的數(shù)據(jù)流。然而,您可能會(huì)驚訝地發(fā)現(xiàn),盡管面對(duì)如此巨大的規(guī)模,F(xiàn)acebook 仍然選擇使用 MySQL 數(shù)據(jù)庫(kù)作為其核心的數(shù)據(jù)存儲(chǔ)和管理系統(tǒng)。 為什么Facebook沒有選擇其他更強(qiáng)大或更高級(jí)的數(shù)據(jù)庫(kù)系統(tǒng)?

    2024年02月04日
    瀏覽(25)
  • 為什么 AIGC 和大模型創(chuàng)業(yè)者都在安利向量數(shù)據(jù)庫(kù)?

    為什么 AIGC 和大模型創(chuàng)業(yè)者都在安利向量數(shù)據(jù)庫(kù)?

    從目前 VC 的投資數(shù)據(jù)來(lái)看,大家對(duì) AI 的關(guān)注點(diǎn)主要有三個(gè):一個(gè)是基礎(chǔ)大模型 LLM,第二個(gè)是具體某個(gè)場(chǎng)景的應(yīng)用(包括小模型),第三個(gè)就屬基礎(chǔ)模型與應(yīng)用層之間的中間層了(開發(fā)者工具和數(shù)據(jù)庫(kù)等)。 隨著開發(fā)者瘋狂涌入開發(fā)各種 AI 應(yīng)用,中間層已經(jīng)成為各大 VC 爭(zhēng)搶

    2024年02月09日
    瀏覽(18)
  • mysql面試題30:什么是數(shù)據(jù)庫(kù)連接池、應(yīng)用程序和數(shù)據(jù)庫(kù)建立連接的過(guò)程、為什么需要數(shù)據(jù)庫(kù)連接池、你知道哪些數(shù)據(jù)庫(kù)連接池

    mysql面試題30:什么是數(shù)據(jù)庫(kù)連接池、應(yīng)用程序和數(shù)據(jù)庫(kù)建立連接的過(guò)程、為什么需要數(shù)據(jù)庫(kù)連接池、你知道哪些數(shù)據(jù)庫(kù)連接池

    該文章專注于面試,面試只要回答關(guān)鍵點(diǎn)即可,不需要對(duì)框架有非常深入的回答,如果你想應(yīng)付面試,是足夠了,抓住關(guān)鍵點(diǎn) 數(shù)據(jù)庫(kù)連接池是一種用于管理和復(fù)用數(shù)據(jù)庫(kù)連接的技術(shù)。它是在應(yīng)用程序和數(shù)據(jù)庫(kù)之間建立一組數(shù)據(jù)庫(kù)連接,并以池的形式存儲(chǔ)起來(lái),每當(dāng)應(yīng)用程序需

    2024年02月07日
    瀏覽(31)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包