顯示具有 資料庫 標籤的文章。 顯示所有文章
顯示具有 資料庫 標籤的文章。 顯示所有文章

實體關係圖之關係

 舉例說明一個三元關係不等於三個二元關係結合

三元關係,能同時表示三個實體在一個關係的參與情況,卻無法表示任兩個實體間單獨關係

供應商供應某零件給某項目



三個二元關係沒法同時間關聯供應商、零件、項目三者,故無法準確表達三元關係「供應」因此兩者不同



實體關係圖之實體

 實體類型定義與區別

強實體型別

每筆資料可單獨存在,具自己的主鍵

弱實體型別

每筆資料不可單獨存在,需依附其他實體,無自己的主鍵,需依靠其他實體主鍵做標示

例子



實體關係圖之屬性

 儲存屬性(stored)與推導屬性(derived)定義與區別

儲存屬性:直接存至資料庫的屬性,不由其他屬性算出,例如出生日期。



推導屬性:屬性值能由其他屬性算出,不用存入資料庫,例如年齡可由出生日期屬性算出。

簡單屬性(simple)與組合屬性(composite)區別與定義

簡單屬性:屬性具不可分割之單一性,例如


組合屬性:由多個簡單屬性組成,例如



資料庫與資料庫管理系統定義

 1. 資料庫(Database):資料庫是一種有系統地儲存數據的集合,用於管理和存取大量資料。這些資料通常組織成表格形式,以便能夠有效地進行查詢、更新和管理操作。資料庫的目標是提供一個便於儲存和檢索的環境,適合應用於不同領域,例如商業、教育、醫療等。


2. 資料庫管理系統(Database Management System, DBMS):DBMS 是一套軟體,用於建立、管理和維護資料庫。它提供了使用者與資料庫互動的介面,讓使用者能夠方便地執行資料操作(如插入、查詢、更新和刪除資料)。DBMS 還能確保資料的一致性、安全性和完整性,並提供資料備份與恢復功能,常見的 DBMS 包括 MySQL、Oracle、Microsoft SQL Server 等

ANSI/SPARC 資料庫三層架構

 ANSI/SPARC 資料庫三層架構是什麼

  • 一種標準化的資料庫設計模型。模型是什麼?簡化的表示,如地圖是現實世界的模型。
  • 分層架構,為解決資料庫設計問題,提供資料抽象化與獨立性。

ANSI/SPARC 資料庫三層架構



外部層(External/View layer):

不同使用者/應用程式觀點,不同終端使用者(End User)看到資料庫不同部分的資料(有不同view)。

概念層(Conceptual/Logical layer):

以資料庫管理員觀點,看到資料庫的整體性資料(基礎表格base table)。

內部層(Internal/Physical layer):

看到資料存在資料庫之資料結構。


資料獨立

改資料庫系統某層綱要,不用跟著該其上層綱要,類型:

邏輯資料獨立(logical data independence)定義/做法

改資料庫邏輯結構(概念綱要),不用跟著改使用者/應用程式(外部綱要),如擴大資料規模。

例如:在員工資料庫增加欄位,不影響現有應用程式對資料庫查詢。

實體資料獨立(physical data independence)定義/做法

改資料實際儲存方式(內部綱要),不用跟著改資料庫邏輯結構(概念綱要),與使用者/應用程式(外部綱要),如重組某些實體檔案結構。

例子:加一個新的索引來提高效能,不影響應用程式操作。

優點

減少應用程序的維護成本:因改資料庫的邏輯結構或物理存儲結構不影響應用程式,故能節省時間和資源。

靈活性:資料庫的設計和存儲方式可靈活變動。如,據需要優化查詢效能或存儲空間,而不影響應用程式的運行。

改進系統性能:資料庫管理員可以根據硬體和效能需求對物理存儲結構進行優化(如添加索引、調整存取方法),從而提高數據存取速度,這一切都不會影響數據庫的邏輯結構或應用程式。

簡化資料庫設計:設計者可以專注於數據的邏輯結構,而不必過度關注數據如何實際存儲。這種抽象層級的設計,使得數據模型的構建和管理更加容易和可控。

應對資料結構變更:隨著業務需求的改變,可能需要修改資料庫結構。資料獨立性允許在不影響應用層的情況下進行這些修改,從而提高了資料庫系統的可擴展性。

ANSI/SPARC 資料庫三層架構之綱要





或稱資料庫管理系統之三層模式(三層綱要架構/three-schema architecture),由 ANSI/SPARC討論,在資料庫系統內描述描述資料的資料(schema/meta data)亦分為三層。

三層定義參考ANSI/SPARC資料庫三層架構定義。

建三層綱要目的

實現資料獨立性:

   邏輯資料獨立性:通過概念模式,應用程式可以在不依賴物理存儲結構的情況下正常運作,即使底層的物理結構發生改變,應用層不會受到影響。

   物理資料獨立性:內部模式的改變(如文件結構或索引的優化)不會影響概念模式,這樣應用程式和使用者不需要知道資料如何具體存儲,只需關注數據的邏輯結構。


2. 提供靈活性:

   三層架構允許數據在不同層次上進行獨立變更。例如,內部模式的變更不會影響概念模式或外部模式,這樣可以靈活地調整存儲結構、優化效能或應對硬體更新,而不會干擾應用層邏輯。


3. 加強數據的安全性和隱私性:

   外部模式允許為不同的使用者和應用程式定義專屬的數據視圖,從而控制每個使用者能夠存取的數據範圍。這樣可以保護敏感資料,防止未經授權的存取或操作,從而增強資料庫系統的安全性。


4. 簡化資料庫的管理和維護:

   通過三層架構,資料庫管理員可以專注於不同層次上的問題。例如,內部層主要關注存儲效率和資源使用,概念層則關注數據模型設計和約束條件,外部層則關注使用者需求和應用程式的整合。這樣可以簡化資料庫系統的設計、優化和管理。


常見題目

  • 繪圖說明ANSI/SPARC 資料庫架構
  • 指出資料獨立概念在架構圖的位置與意義
  • 舉例描述三層資料庫綱要與定義

關聯式資料模型的完整性限制

 完整性限制(Integrity constraints)

  • 實體完整性限制(entity integrity constraints)
  • 參考完整性限制(referential integrity constraints)

實體完整性限制(entity integrity constraints)

表格中的主鍵須為唯一且不能為空(NULL),確保主鍵能識別表格中的每筆紀錄,避免資料重複與不一致。

參考完整性限制(referential integrity constraints)

表格中的外部鍵可以為空或必參考到另一個表格的主鍵,該主鍵需存在。確保表格間的關聯。避免資料不存在,如引用某個不存在的資料表。當主鍵被更新或刪除需考慮如何影響到外部鍵,如連鎖更新(cascade update)或連鎖刪除(cascade delete)

分治法

資料結構應用分治法的排序有合併/快速/堆排序,時間複雜度為O(nlogn),分治法(divide and conquer)就是將一個大問題分解為小問題,解決小問題將之合併成最終答案。以分治法考慮為何需要有完整性限制,首先沒完整性限制會遇到表格中有資料重複的問題,當你用一個屬性值取資料時,因為該屬性值重複,所以會取到多筆紀錄,你得從多筆記錄中發現那筆自己想找的記錄很花時間。如果取資料能一次就找到想找的那筆資料就好了,這時我們把表格中的一個屬性設為唯一,即該屬性沒有重複值,之後我們找資料就能用唯一的屬性一次取得想要的那筆資料了。

另一個問題是,我們用一個表格中的一個屬性關聯(關聯屬性)另一個表格的一個屬性(被關聯屬性),可以想成樂高積木的凸面與凹面,當凸面與凹面規格一致就可以組合,而兩個表格就像兩塊積木,它倆的組合面是關聯屬性與被關聯屬性,當兩屬性值一樣時就能結合在一起。如果一個關聯屬性值存在,一個被關聯屬性值不存在時,會出現一個問題,就是我找出來的那筆記錄有少資料,因為被關聯屬性值不存在,以至於無法判斷兩屬性值是否一樣,所以無法結合在一起,就如同兩塊積木規格不同而無法組合一樣。所以我們對表格加一道限制,被關聯屬性值需存在,如此就能解決無法結合的問題了。

解決了上述兩個問題,我們將解法合併為一個完整性限制,以後在設計資料表時,套用完整性限制,就能讓設計出來的資料表具完整性且沒有重複。

常考題目

資料庫設計的三個階段

 

概念資料塑模(conceptual data modeling)

產出

概念資料模型或ERD 用實體、屬性、關係描述系統資料結構關係。

ANSI/SPARC資料庫三層架構對應

概念層

邏輯資料庫設計(logical database design)

產出

據概念資料模型化為邏輯資料模型,含正規化表格與完整性限制定義

ANSI/SPARC資料庫三層架構對應

外部層

實體資料庫設計(physical database design)

產出

據邏輯資料模型轉具體實作,實體資料模型含實際資料庫結構(表格)及優化策略

ANSI/SPARC資料庫三層架構對應

內部層

各階段的產出為逐步將使用者需求轉成可用的資料庫結構。

階段可以逆序嗎?

階段逆序也就是說原本是階段1,2,3,改為階段3,2,1,要知道是否能逆序,首先要知道資料庫設計每個階段在做甚麼:

階段一、概念資料塑模,建立ERD 。

階段二、邏輯資料庫設計,據ERD 建邏輯資料模型,即正規化資料表與完整性限制,即SQL 定義。

階段三、實體資料庫設計,執行SQL 定義產生實體資料結構(資料表)。

有SQL 定義的執行才有實體資料結構,我們不能有實體資料結構在去生出SQL 定義,所以不能階段三後進行階段二。而進行階段二時,我們發現資料表有點問題,可能當初畫ERD 沒有考慮清楚,跳到階段一做ERD 修改。

因此我們可以得出一個新的階段順序:

階段 1<-->2 -> 3 ,其中<-->表示來回。

在階段二、三來回反覆修正SQL 定義直到正確,在執行階段三。

用SQL 建表格加入限制名稱

 舉例

- 建立 Worker 表

CREATE TABLE Worker (

    wID INT PRIMARY KEY, -- 工作人員編號

    name VARCHAR(50) NOT NULL, -- 工作人員姓名

    deptID INT NOT NULL, -- 所屬部門代號

    CONSTRAINT fk_deptID FOREIGN KEY (deptID) REFERENCES Department(dID) -- 外鍵連接 Department 表的 dID

);

限制名稱功能

有助於查詢及修改限制,如沒加限制名稱系統會自動產生預設限制名稱。

如外部限制出錯,系統會回傳限制名稱有助除錯。

查詢限制舉例

SELECT

    CONSTRAINT_NAME,

    TABLE_NAME,

    COLUMN_NAME,

    REFERENCED_TABLE_NAME,

    REFERENCED_COLUMN_NAME

FROM

    INFORMATION_SCHEMA.KEY_COLUMN_USAGE

WHERE

    CONSTRAINT_NAME = 'fk_deptID';

刪除外部限制舉例

ALTER TABLE Worker

DROP FOREIGN KEY fk_deptID;

修改外部限制舉例

ALTER TABLE Worker

DROP FOREIGN KEY fk_deptID;


ALTER TABLE Worker

ADD CONSTRAINT fk_deptID FOREIGN KEY (deptID) REFERENCES Department(dID) ON DELETE CASCADE;


用SQL 對已建立的表格新增限制

 -- 現在更新 Department 表,將 managerID 設為外鍵,因為 Employee 已建立

ALTER TABLE Department

ADD CONSTRAINT fk_managerID FOREIGN KEY (managerID) REFERENCES Employee(eID);


資料庫目錄

資料庫概念

資料庫管理系統架構

資料模式概述與實體關聯模式

關聯式資料模型(relational data model)

階層式資料模式與網路式資料模式

關連式資料庫

(一)關連式代數
(二)關連式計算法則
(三)資料庫管理系統
(四)SQL 語法與程式設計

資料庫設計

功能相依

正規化形式

資料庫發展生命週期

資料庫設計過程

資料庫管理

資料庫環境

(一)復原與交易管理
(二)同步控制

資料庫的應用

(一)資料庫趨勢
(二)分散式資料庫
(三)Client/Server 資料庫
(四)物件導向資料庫
(五)XML 資料庫
(六)資料倉儲
(七)名詞解釋
(八)資料分析與商業智慧
(九)資料探勘
(十)大數據
(十一)資料庫與安全
(十二)Nosql
(十三)關聯式資料庫