資料庫 vs 資料庫管理系統


資料庫是什麼? 資料庫管理系統又是什麼? 我們說的MySQL是資料庫? 還是資料庫管理系統?

我們仔細的把這些東西探究一下吧 !


什麼是資料庫?

資料庫 (Database) 是按照一定數據結構來組織、存儲和管理數據的容器。它是存儲數據的地方,可以包含各種數據類型,例如文字、數字、圖片等,資料庫的目的是為了高效地存取和管理數據。


什麼是資料庫管理系統?

資料庫管理系統 (Database Management,DBMS) 是一套軟體,用於創建、維護和操作資料庫,提供一種系統化的方法來管理資料庫中的數據,包括數據的存儲、檢索、更新和管理。

因此資料庫是「容器」,資料庫管理系統是用於創建、維護和操作「容器」裡面的「軟體」。用更清楚的比喻來說,Word檔案是「資料庫」的話,微軟的Word軟體就是「資料庫管理系統」了。

Word檔案不一定要微軟的Word軟體才能創建、維護和操作,Word檔案也可以使用LibreOffice Writer創建、維護和操作。同樣的,MySQL資料庫也可以使用MySQL Workbench或是HeidiSQL來創建、維護和操作。

因此狹義來說,MySQL是一種資料庫,但是我們下載MySQL安裝在電腦上,其實是安裝MySQL資料庫管理系統,我們可以透過指令模式進行MySQL資料庫的創建、維護和操作。

所以廣義來說,MySQL是一種資料庫,MySQL也是資料庫管理系統,只是他只能創建、維護和操作MySQL一種資料庫。

但是一般我們提到「MySQL」時,通常是指 MySQL 資料庫管理系統(DBMS),它使得使用者和應用程式能夠透過 SQL 語言和其他工具與資料庫進行互動。 雖然「資料庫」這個詞有時也會被用來泛指使用 MySQL 管理的資料集合,但在技術上更精確的說法是,MySQL 是資料庫管理系統,而在這個管理系統下創建和管理的每一個資料集合才是「資料庫」。

結論是,當我們說「MySQL」時,大部分情況下是在談論這套「資料庫管理系統」,而不是指MySQL資料庫。


資料庫有哪些不同的類型? 

資料庫可以根據其資料模型、使用場景和技術特性被分為多種不同的類型。以下是一些常見的資料庫類型:

1. 關聯式資料庫(Relational Database):

   - 資料以表格的形式儲存,每個表格由行(紀錄)和列(屬性)組成。

   - 使用結構化查詢語言(SQL)進行資料操縱和查詢。

   - 例子包括 MySQL、MariaDB、Oracle、SQL Server、PostgreSQL 等。

上面說的行列,在台灣與國外的用法有些差異,例如台灣的用法習慣將「列」翻譯為Row,將「行」翻譯為Column。但是國外卻顛到,把「列」視為Column,把「行」視為Row。

但是在關聯式資料庫中,Row就是指一筆紀錄,Column就是指資料表中的一個屬性(欄位),這就沒有任何疑義。因此講資料庫時,就盡量避免使用中文的「行、列」,而只用英文的「Row、Column」比較不會造成誤解。

2. 非關聯式資料庫(NoSQL Database):

   - 專為儲存非結構化或半結構化資料設計,不依賴於固定的表格結構。

   - 包括多種類型,如文件資料庫、鍵值資料庫、圖形資料庫等。

   - 例子包括 MongoDB(文件資料庫)、Redis(鍵值資料庫)、Neo4j(圖形資料庫)等。

3. 時序資料庫(Time Series Database):

   - 專門設計來儲存和處理隨時間變化的資料序列。

   - 常用於監控系統、物聯網應用、金融市場數據等領域。

   - 例子包括 InfluxDB、TimescaleDB 等。

4. 物件導向資料庫(Object-Oriented Database):

   - 資料以物件的形式儲存,允許複雜資料結構的直接儲存。

   - 適用於需要儲存複雜資料模型的應用程式,如工程應用和科學模擬等。

   - 例子包括 db4o、ObjectDB 等。

5. 圖形資料庫(Graph Database):

   - 專門設計來處理圖形結構資料,即由節點(實體)和邊(關係)組成的資料。

   - 適用於需要高效處理複雜關係的應用,如社交網路分析、推薦系統等。

   - 例子包括 Neo4j、ArangoDB 等。

6. 分散式資料庫(Distributed Database):

   - 資料分布儲存於網路上的多個節點中。

   - 旨在提高資料的可用性、可擴展性和災難恢復能力。

   - 可以是關聯式或非關聯式的,例子包括 Cassandra(分散式 NoSQL 資料庫)、CockroachDB(分散式 SQL 資料庫)等。

這些資料庫類型各自有不同的優點和適用場景,選擇哪一種資料庫通常取決於特定應用的需求、資料的性質和預期的擴展性。

當然在某些時候,你很難區分某些資料庫是屬於哪種類型,例如上面說PostgreSQL是關聯式資料庫,但是PostgreSQL也具有物件導向資料庫的特性;MongoDB雖然是文件導向資料庫,但是也有鍵值資料庫的特性;Oracle雖然是關聯式資料庫,但是也支援非關聯式資料庫NoSQL Database。

例如以下PostgreSQL語法 : 

CREATE TABLE vehicle (
vehicle_id SERIAL PRIMARY KEY,
brand VARCHAR(50),
model VARCHAR(50)
);

CREATE TABLE car (
car_id SERIAL PRIMARY KEY,
seating_capacity INT
) INHERITS (vehicle);

以上建立兩個資料表vehicle與car,後面的資料表car就繼承了資料表vehicle的欄位,所以資料表car雖然本身只有宣告2個欄位car_id與seating_capacity,但是資料表car總共有5個欄位 : 

car_id SERIAL PRIMARY KEY
seating_capacity INT
vehicle_id SERIAL
brand VARCHAR(50)
model VARCHAR(50)

資料表car從資料表vehicle繼承了欄位過來,但是資料表vehicle的主鍵在資料表car中就不是主鍵。



張貼留言

0 留言