後端開發環境好難架,初學資料庫到底需要了解哪些東西?

更新於 發佈於 閱讀時間約 8 分鐘
軟體系統的發展歷程大多相似,首重解決基本需求、提供操作介面,進而提升安全性、擴充功能、優化操作。
raw-image


資料庫的初衷

管理資料時,我們通常面對幾個基本需求:

資料格式:需要定義資料的結構和格式,通常以表格(table)和欄位(column)的形式呈現。

資料間需要相互參考:資料之間可能需要相互參考,可以通過關聯式或非關聯式的方式實現。

資料操作:對資料進行新增、修改和刪除等操作是必不可少的。

查詢資料:需要能夠根據特定條件查詢資料,以獲取所需的信息。


語意介面: 請資料庫做事 - SQL語法

為了解決基本需求,我們必須有一組跟資料庫的對話方式,而最常見的對話方式就是透過SQL語法

只要對資料庫發送有效的SQL語法,就會得到預期的操作結果,以搜尋名稱為'admin'的使用者為例:

SELECT * FROM users WHERE name = 'admin';

以上語法對於任一SQL資料庫(PostgreSQL、MySQL、Oracle、Microsoft SQL Server... )皆有效。


通訊介面: 與資料庫對話 - TCP/IP

有了對話語法後,下一個問題是雙方能透過什麼方式交換SQL語法,這裡則是使用經典的TCP/IP client-server架構

所有後端教學,一定會有安裝資料庫伺服器程式在自己電腦上的環節。


資料庫伺服器

這個動作其實涉及許多網路服務的概念,也是初學者經常搞不懂的部分。網路服務在程式碼的呈現通常是一組ip:port,例如: 200.100.0.1:80,ip讓使用者能夠連線到主機,而port讓使用者能連線到服務程式

網路上有多個服務主機,透過ip才能指定要連線到哪一台主機
主機可以運行多個服務程式,透過port才能指定要連線到哪一個服務程式

運行在服務主機上的服務程式就是大家熟知的server-side program,通常會透過一個無限while迴圈持續監聽port來接收訊息、回應執行結果。


將資料庫程式設計成TCP/IP client-server架構有許多優勢:

  1. 可擴展性:資料庫容易地擴展以適應不同的地理位置和增加的用戶需求。
  2. 資源共享:多個客戶端可以同時訪問同一伺服器上的數據。
  3. 安全性:有效地實施安全措施,保護數據不被未授權訪問。


了解網路服務的概念後應該不難理解,各種後端教學裡下載安裝資料庫伺服器程式,其實就是讓自己的電腦成為提供資料庫服務的主機

只是資料庫服務的使用者是自己正在開發中的後端程式。

以postgreSQL為例,安裝完成後會跑在127.0.0.1:5432之下。

# mac
lsof -i :5432 -n -P

COMMAND  PID     USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME

postgres 320 postgres    7u  IPv6 0xcae2bc7a36b7ade1      0t0  TCP *:5432 (LISTEN)

postgres 320 postgres    8u  IPv4 0xcae2bc756d253de9      0t0  TCP *:5432 (LISTEN)



資料庫客戶端

當我們安裝好資料庫伺服器後,下一步就是如何管理資料庫、操作數據、檢視數據。這個時候cilent-server架構就發揮了強大的威力,有各式各樣的客戶端程式可以連線到資料庫伺服器。

raw-image


1.命令列工具

通常資料庫伺服器安裝程式都會提供可以在終端機執行的命令列工具,以postgreSQL來說就是psql,底層使用libq函式庫。

raw-image


2.桌面應用

當專案、資料數量增加了之後,命令列會漸漸難以負荷日益沈重的管理、查閱資料的作業需求,這時候我們通常會需要圖形化的桌面應用程式幫忙。

以postgreSQL來說,原廠提供使用python開發的pgAdmin,畫面簡潔易用,底層使用psycopg2函式庫。

raw-image
raw-image


我常用的是開源版本的DBeaver,操作上也是簡潔流暢,除此之外還支援多種資料庫類型,功能非常強大。

raw-image
raw-image


3.後端應用程序

後端應用程序,像Django,是前端(比如網頁界面)和資料庫之間的重要橋樑。這些應用程序封裝了複雜的資料庫操作,無需直接使用SQL語句來與資料庫溝通。

raw-image


這些封裝後的資料庫操作,最後會透過db client傳送給db server,這也是為什麼新建一個Django開發專案時,我們要先下載安裝資料庫客戶端套件:psycopg2, 再將資料庫伺服器設定填寫至設定檔(settings.py) ,才能讓Django順利與資料庫伺服器溝通。

# 安裝資料庫客戶端套件
pip install psycopg2


# Django settings.py​
DATABASES = {
'default': {

'ENGINE': 'django.db.backends.postgresql',

'NAME': 'db-demo',

'USER': 'db-admin',

'PASSWORD': '12345678',

'HOST': 'localhost',

'PORT': '5432',

}
}


深度思考 - 資料庫客戶端的底層實現

像libpq、psycopg2這樣的工具,扮演著應用程序與資料庫伺服器之間的橋樑角色,幫助開發者以簡單的方式執行複雜的資料庫操作,無需深入了解背後發生的具體細節。

Libpq 和 Psycopg2

  • Libpq 是用於連接PostgreSQL資料庫的C語言函式庫,它處理所有底層的網路通信和數據交換。
  • Psycopg2 基於Libpq,是一個Python函式庫,使Python開發者能夠輕鬆與PostgreSQL資料庫互動,執行如查詢和更新數據等操作。
範例1: django使用psycopg2與database server連線
import psycopg2

# 連接到 PostgreSQL 數據庫
conn = psycopg2.connect(
dbname="your_dbname",
user="your_username",
password="your_password",
host="your_host",
port="your_port"
)

# 創建一個 cursor 對象用來執行 SQL 命令
cur = conn.cursor()

# 執行一個查詢
cur.execute("SELECT * FROM your_table")

# 獲取查詢結果
rows = cur.fetchall()

# 輸出查詢結果
for row in rows:
print(row)

# 關閉 cursor 和連接
cur.close()
conn.close()
範例2: psycopg2使用libq與database server連線
#include <libpq-fe.h>

void connect_to_database(const char *conninfo) {
PGconn *conn = PQconnectdb(conninfo);
if (PQstatus(conn) != CONNECTION_OK) {
fprintf(stderr, "Connection to database failed: %s", PQerrorMessage(conn));
PQfinish(conn);
exit(1);
} else {
fprintf(stdout, "Connection to database succeeded\n");
}
// Always close the connection after done using it
PQfinish(conn);
}


結論

資料庫管理涉及了不同領域的軟體知識,不管是後端或是全端新手,通常在一系列的安裝教學過後已經迷失方向,希望大家可以透過這篇文章稍微了解裝了哪些東西、為何而裝,有方向的慢慢補足相關知識。

  • 網路服務
  • TCP/IP
  • Client-Server架構
  • Linux Shell Script
留言
avatar-img
留言分享你的想法!
avatar-img
再寫5分鐘
66會員
19內容數
探索自我實現的小角落。沒有高高在上的教條,只有真實的分享和心得。
再寫5分鐘的其他內容
2024/07/02
在前一篇我們已經成功地建立簽核表單及簽核節點並關聯回請假表單,而本篇會接著介紹如何管理簽核節點狀態並同步更新簽核表單狀態。
Thumbnail
2024/07/02
在前一篇我們已經成功地建立簽核表單及簽核節點並關聯回請假表單,而本篇會接著介紹如何管理簽核節點狀態並同步更新簽核表單狀態。
Thumbnail
2024/07/02
本文介紹瞭如何在後端系統開發時設計不同表單的簽核流程,包括請假表單和採購表單。以及如何動態生成簽核表單,並建立簽核節點。另外還介紹瞭如何利用繼承來簡化簽核流程的設定。
Thumbnail
2024/07/02
本文介紹瞭如何在後端系統開發時設計不同表單的簽核流程,包括請假表單和採購表單。以及如何動態生成簽核表單,並建立簽核節點。另外還介紹瞭如何利用繼承來簡化簽核流程的設定。
Thumbnail
2024/06/15
《Future GPX Cyber Formula》閃電霹靂車是一部關於AI賽車的動漫作品,講述了主角與AI合作的故事。文章引述了動漫中的情節與角色,突出了AI協助駕駛者的功能。全文帶有熱血激情、深度思考和特殊概念。
Thumbnail
2024/06/15
《Future GPX Cyber Formula》閃電霹靂車是一部關於AI賽車的動漫作品,講述了主角與AI合作的故事。文章引述了動漫中的情節與角色,突出了AI協助駕駛者的功能。全文帶有熱血激情、深度思考和特殊概念。
Thumbnail
看更多
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
如果你也是從事軟體相關工作的人,一定會遭遇突然需要你去學習一套你不熟悉的程式語言狀況吧,此時你會怎麼做呢? 是趕快去買書來看嗎? 還是趕快找一門程式課來上? 又或者乾脆去找會的同事來教學?
Thumbnail
如果你也是從事軟體相關工作的人,一定會遭遇突然需要你去學習一套你不熟悉的程式語言狀況吧,此時你會怎麼做呢? 是趕快去買書來看嗎? 還是趕快找一門程式課來上? 又或者乾脆去找會的同事來教學?
Thumbnail
你好,在下最近在學習開發web,學了html css js,也得出一些心得,由於網路上已有許多教學,所以我會著重在如何開發出to do List,以及解釋我寫的程式碼。相關的教學我會直接貼網址。如果我有什麼地方出錯,或者是可以寫得更好,歡迎在下方留言,討論。 首先先介紹我的開發環境: 我用了vs
Thumbnail
你好,在下最近在學習開發web,學了html css js,也得出一些心得,由於網路上已有許多教學,所以我會著重在如何開發出to do List,以及解釋我寫的程式碼。相關的教學我會直接貼網址。如果我有什麼地方出錯,或者是可以寫得更好,歡迎在下方留言,討論。 首先先介紹我的開發環境: 我用了vs
Thumbnail
實際就業後,會發現收集與分析需求,通常都不是工程師在做,會有另一群人,以非工程的角度收集及分析需求,然後在開發過程中蹦出不同的火花,於是很好奇另一群人的想法是什麼?我不敢說這本書能完全代表另一群人的想法,但確實能夠得到很多有用的思維。推薦給所有的軟體工程師。
Thumbnail
實際就業後,會發現收集與分析需求,通常都不是工程師在做,會有另一群人,以非工程的角度收集及分析需求,然後在開發過程中蹦出不同的火花,於是很好奇另一群人的想法是什麼?我不敢說這本書能完全代表另一群人的想法,但確實能夠得到很多有用的思維。推薦給所有的軟體工程師。
Thumbnail
軟體系統的發展歷程大多相似,首重解決基本需求、提供操作介面,進而提升安全性、擴充功能、優化操作。
Thumbnail
軟體系統的發展歷程大多相似,首重解決基本需求、提供操作介面,進而提升安全性、擴充功能、優化操作。
Thumbnail
經過這麼多年的觀察與實踐,一個成熟的軟體工程師還需要第四個要素,它是讓決定你通往熟手的重要關鍵沒有之一。
Thumbnail
經過這麼多年的觀察與實踐,一個成熟的軟體工程師還需要第四個要素,它是讓決定你通往熟手的重要關鍵沒有之一。
Thumbnail
列出一套完整的程式 程式設計有許多種方法,不過通常會先列出清單的再逐一執行,這樣會加快程式設計的速度。設計通常會採取順推的辦法。所以順推的程式設計方式就是經歷觀念溝通、系統分析、資料統合、權限管理、頻率與時間、後台管理、畫面設計等等階段後,將框架設計完了以後,先列出一套完整的程式,將所有使用者都確
Thumbnail
列出一套完整的程式 程式設計有許多種方法,不過通常會先列出清單的再逐一執行,這樣會加快程式設計的速度。設計通常會採取順推的辦法。所以順推的程式設計方式就是經歷觀念溝通、系統分析、資料統合、權限管理、頻率與時間、後台管理、畫面設計等等階段後,將框架設計完了以後,先列出一套完整的程式,將所有使用者都確
Thumbnail
程式設計中不可或缺的一部分 介面是使用者與程式互動的媒介,因此介面的設計會影響使用者的體驗和感受。一個清晰明白、易懂的介面,可以讓使用者輕鬆地使用程式,並獲得良好的使用體驗。 需要與程式設計師密切溝通 設計師需要了解程式的功能和需求,並根據使用者的習慣和需求進行設計。設計師和程式設計師之間的溝
Thumbnail
程式設計中不可或缺的一部分 介面是使用者與程式互動的媒介,因此介面的設計會影響使用者的體驗和感受。一個清晰明白、易懂的介面,可以讓使用者輕鬆地使用程式,並獲得良好的使用體驗。 需要與程式設計師密切溝通 設計師需要了解程式的功能和需求,並根據使用者的習慣和需求進行設計。設計師和程式設計師之間的溝
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News