單元 1.3.2 資料庫
如今,幾乎所有組織都在使用資料庫。它們允許快速檢索、更新和篩選資料。它們允許某些使用者訪問受限的資料(例如,使用者只能看到他們被允許看到的內容),這對於安全性和專注於工作很有幫助。它們還降低了出現不一致或錯誤的可能性。
歷史上,資料儲存在單獨的檔案中。它們通常儲存在序列或順序檔案中,因為資料儲存在磁帶上,磁帶必須按順序寫入或讀取。
序列檔案中的記錄一個接一個地儲存。這是在磁帶等細長介質上儲存資料的唯一方式。檔案可以包含必要數量的資料,但每個記錄必須具有相同的結構。要定位記錄,必須從頭到尾搜尋整個檔案。對於大型檔案,這可能是一個漫長的過程。
順序檔案中的記錄一個接一個地儲存,但按特定順序儲存。這使得搜尋特定記錄變得容易得多。但是,它可能會造成問題,例如在每天的圖書館交易中。除了按時間順序外,沒有特定的順序可遵循(如書號、借書人號或借書日期),這將無濟於事。
這意味著必須定期對資料進行排序。這涉及將資料寫入另一個檔案,這只是一個部分解決方案。搜尋檔案仍然很耗時,並且必須在排序完成後才能進行。
索引透過生成一個單獨的索引檔案來允許更快地搜尋順序檔案。資料被劃分為類別,這些類別連結到檔案中類別開始的位置。
即使使用所有這些技術,由於搜尋和排序,仍然存在低效率。這些格式中的簡單資料庫是平面檔案資料庫。
固定長度欄位是指每個欄位始終具有相同位元組數的欄位。這允許軟體計算位元組以計算欄位。這是一種易於程式設計的方法,搜尋速度快,易於計算計劃資料庫的檔案大小,但由於並非所有值都會使用分配給該欄位的空間,因此可能會浪費儲存空間。
每個欄位都由一個唯一的識別符號分隔,例如逗號。這允許檔案更小、更靈活。
可以對記錄的關鍵欄位進行轉換,以建立磁碟地址。這允許裝置直接轉到磁碟的特定部分並從那裡開始。這種方法非常適用於稀疏資料庫。
- 快速且易於建立
- 適用於少量資料
- 非常適合單實體模型
- 資料冗餘 - 重複的資料存在
- 資料不一致 - 重複的資料更容易出錯
- 資料完整性降低
- 資料依賴 - 更改資料格式可能需要更改整個程式。
- 在平面檔案資料庫中,查詢和報告更具挑戰性。
在關係資料庫中,資料儲存在單獨的表中。每個表儲存有關特定實體的資料。關係資料庫應該遵守某些規則
- 每行必須以相同的方式構建,即每列只能包含一種資料型別。
- 一列或多列的組合必須使每行唯一。這個唯一識別符號稱為主鍵,如果使用多列,則稱為複合主鍵。
- 關於行或列順序沒有特定規則。
- 關係(表)中的兩個元組(行)不能相同。
關係資料庫中的表透過關係連結。記錄之間的關係是透過將外部索引鍵欄位的值設定為另一個表中所需記錄的主鍵來實現的。
次要鍵允許快速搜尋關係,透過將類似項與非唯一鍵連結。例如,郵政編碼對單個房屋而言並不唯一,但它可以用於快速查詢某個街區的房屋。
資料儲存在單獨的表中以避免資料冗餘。但是,將實體分離到資料庫中的方法並不總是顯而易見的,因此使用了資料庫規範化過程。
規範化是指設計關係資料庫以使其最有效,從而提高其效率和實用性。它圍繞著減少冗餘資料和確保資料依賴關係。它是一系列逐步引導到正規化化的步驟。
規範化的優勢
- 無資料冗餘,因為資料儲存在一個地方,節省了儲存空間
- 資料完整性得到維護,因為資料不會重複,所以不會變得不一致
- 參照完整性強制執行,阻止相關記錄成為孤兒(透過防止一對多關係中的一方被刪除)
- 搜尋速度更快,因為表更小,欄位更少
- 可以執行更復雜的查詢,因為資料可以在相關表之間連結
存在資料冗餘,並且可能在單個屬性內具有複雜的資料結構。
每個欄位只包含該屬性的一個數據。例如,學生表中的科目欄位只包含一個科目。
從 UNF 轉換為 1NF
- 消除同一表中的重複屬性
- 消除單個屬性中包含複雜資料結構的條目,使用多個條目
- 識別(a)唯一標識每個條目的列
1NF 且沒有部分依賴關係(沒有屬性依賴於複合主鍵的一部分)。
從 1NF 轉換為 2NF
- 刪除出現在多行中的任何資料集並將它們轉移到新表
- 使用外部索引鍵在這些新表和早期表之間建立關係
2NF 且不包含非鍵依賴關係(屬性依賴於不是鍵的另一個屬性的值)。
所有屬性都依賴於鍵,整個鍵,僅此而已。
從 2NF 轉換為 3NF
- 刪除任何不依賴於主鍵的列並將它們轉移到新表
這些圖顯示了實體之間的關係

DBMS 是一種用於建立和管理資料庫的軟體型別。它們為使用者提供了系統化的方法來檢索、排序、更新和管理資料。它充當訪問資料庫的應用程式和儲存在資料庫中的資料之間的中介。DBMS 處理
- 資料庫結構
- 單個表
- 查詢
- 介面
- 檢視
- 輸出
DBMS 還具有保護和維護作用,包括
- 訪問許可權的設定和維護
- 自動備份
- 保持參照完整性[1]
- 維護索引
- 更新資料庫
為了保持參照完整性,DBMS 確保外部索引鍵與連結表中記錄的主鍵相對應。可以透過阻止在其他表中被記錄引用的記錄被刪除來強制執行,或者透過級聯刪除引用要刪除的記錄的記錄。
實際資料儲存的檢視。這只是 DBMS 系統工程師關注的問題,因為它顯示了資料項如何在磁碟上儲存。
這查看錶的構造、查詢、報表和軟體,這些軟體將為系統使用者提供資料庫的功能。
資料庫的外觀,以及終端使用者的使用者介面。
這是一種旨在管理資料庫中資料的語言。它可用於訪問、插入和更改資料,並能夠建立、修改和刪除資料庫中的表和關係。
從表中檢索特定欄位的值
SELECT name, city FROM customers;
返回customers表中每個記錄的name和city列的值。
使用條件檢索一組記錄
SELECT * FROM customers WHERE country = "Mexico";
返回customers表中country欄位為 Mexico 的所有記錄的所有列。
使用多個條件檢索一組記錄
SELECT * FROM customers WHERE country = "Germany" and city = "Berlin";
返回customers表中country欄位為 Germany 且city為 Berlin 的所有記錄的所有列。
SELECT * FROM customers WHERE city = "Berlin" or city = "Munich";
返回customers表中city欄位為 Berlin 或 Munich 的所有記錄的所有列。
從表中刪除記錄
DELETE FROM customers WHERE name = "Jordan";
刪除customers表中name欄位為 Jordan 的所有記錄。
向表中插入記錄
INSERT INTO customers (name, country, city) VALUES ("Matt","England","London");
在customers表中插入一條新記錄,name為 Matt,country為 England,city為 London。
刪除整個表
DROP TABLE customers;
刪除customers表及其所有記錄。
從多個表中檢索連結的記錄
SELECT name, cost FROM customers JOIN orders ON customers.id = order.customer_id;
返回orders表中所有記錄的客戶姓名和訂單成本。
ACID 是一組保護資料庫完整性的規則,它們描述了事務必須符合的屬性。事務是對資料庫執行的單個邏輯操作。
- Atomicity - 事務必須全部執行或不執行,不能儲存半完成的事務。如果事務失敗,資料庫不會改變。
- Consistency - 任何事務都必須將資料庫從一個有效狀態帶到另一個有效狀態。例如,在賬戶之間轉賬時,轉入一個賬戶的資金必須與從另一個賬戶中取出資金相平衡。
- Isolation - 事務不能互相干擾。當記錄被鎖定時,事務可以排隊(事務處理),以便事務按順序執行。
- Durability - 事務完成後,它將被永久儲存。在系統故障的情況下,事務及其操作將保留。通常這涉及將資料庫儲存在某種非易失性儲存器[2]中,例如 輔助儲存器。
這些是持久儲存的四個基本功能。
- Create - 可以建立新的實體並將其儲存在表中。
- Read - 可以檢索和輸出有關表中實體的資訊。
- Update - 可以修改有關實體的資訊。
- Delete - 可以從表中刪除實體。