數據庫系統知識點整理

數據庫系統概論

1.1 數據庫系統概述

  • 數據:描述事物的符號記錄稱爲數據。
  • 數據庫:存放數據的倉庫。數據庫是長期儲存在計算機內,有組織的,可共享的大量數據的集合。
  • 數據庫管理系統:是位於用戶與操作系統之間的的一層數據管理軟件。主要功能有:數據定義功能;數據組織,存儲和管理;數據操縱功能;數據庫的事務管理和運行管理;數據庫的建立和維護功能;其他功能。
  • 數據庫系統:是由數據庫、數據庫管理系統(及其應用開發工具)、應用程序和數據庫管理員(DataBase Administrator)組成的存儲、管理、處理和維護數據的系統。
  • 數據庫管理技術經歷了三個階段:人工管理、文件系統、數據庫系統。

  • 人工管理階段

    1. 數據不保存
    2. 應用程序管理數據
    3. 數據不共享
    4. 數據不具有獨立性
  • 文件系統階段

    1. 數據可以長期保存
    2. 由文件系統管理數據
    3. 數據共享性差,冗餘度大
    4. 數據獨立性差
  • 數據庫系統階段

    1. 數據結構化。數據庫系統實現整體數據的結構化,這是數據庫的主要特徵之一,也是數據庫系統與文件系統的本質區別
    2. 數據的共享性高、冗餘度低且抑鬱擴充。數據共享可以大大減少數據冗餘,節約存儲空間,數據共享還能避免數據之間的不相容性與不一致性
    3. 數據獨立性高。數據獨立性包括物理獨立性、邏輯獨立性。物理獨立性是指用戶的應用程序與數據庫中的物理存儲是相互獨立的。邏輯獨立性是指用戶的應用程序與數據庫的邏輯結構是相互獨立的。
    4. 數據由數據庫管理系統統一管理和控制。數據庫管理系統還必須提供以下幾個方面的數據控制功能:
      1. 數據的安全性保護:是指保護數據以防止不合法使用造成的數據泄密和破壞。
      2. 數據的完整性檢查:是指數據的正確性】有效性和相容性。
      3. 併發控制
      4. 數據庫恢復

1.2 數據模型

  • 數據模型是對現實世界數據特徵的抽象,也就是說數據模型是用來描述數據、組織數據和對數據進行操作的;數據模型是數據庫系統的核心和基礎。
  • 數據模型應滿足三方面的要求:一是比較真實的模擬現實世界,二是容易爲人所理解,三是便於在計算機上實現。
  • 根據模型應用的不同目的,可以將這些模型分爲兩大類:第一類是概念模型,第二類是邏輯模型和物理模型。

    1. 第一類概念模型,也稱信息模型,它是按用戶的觀點來對數據和信息建模,主要用於數據庫設計。
    2. 第二類的邏輯模型主要包括層次模型、網狀模型、關係模型、面向對象數據模型和對象關係數據模型、半結構化數據模型等。它是按計算機系統的觀點對數據建模,主要用於數據庫管理系統的實現。
    3. 第二類中的物理模型是對數據最底層的抽象,它描述數據在系統內部的表示方式和存取方法,是面向計算機系統的。
  • 實體:客觀存在並可相互區別的事物稱爲實體

  • 屬性:實體具有的某一特徵稱爲屬性
  • 碼:唯一標識實體的屬性集稱爲碼
  • 實體型:具有相同屬性的實體必然具有共同的特徵和性質,用實體名及其屬性名集合來抽象和刻畫同類實體,稱爲實體型。
  • 實體集:同一類型實體的集合稱爲實體集。
  • 聯繫:實體內部以及實體之間是有聯繫的。實體內部的聯繫通常是指組成實體的個屬性之間的聯繫,實體之間的聯繫通常是指不同實體集之間的聯繫。

    • 實體之間的聯繫有一對一、一對多和多對多等多種聯繫。
  • 概念模型的一種表示方法:實體-聯繫方法(Entity-Relationship approach)。該方法用 E - R 圖(E - R diagram)來描述現實世界的概念模型,E - R 方法也稱爲 E - R 模型。

  • 數據模型通常由數據結構、數據操作和數據的完整性約束條件三部分組成。

    1. 數據結構:數據結構描述數據庫組成對象以及對象之間的聯繫。
    2. 數據操作:數據操作是指數據庫中各種對象(型)的實例(值)允許執行的操作的集合,包括操作及有關的操作規則。數據庫主要有查詢和更新(包括插入、刪除和修改)兩大類操作。
    3. 數據的完整性約束條件:數據的完整性約束條件是一組完整性規則。完整性規則是給定的數據模型中數據及其聯繫所具有的制約和依存規則,用以限定符合數據模型的數據庫狀態以及狀態的變化,以保證數據的正確,有效和相容。
  • 數據庫領域中主要的邏輯數據模型有:

    1. 層次模型
    2. 網狀模型
    3. 關係模型
    4. 面向對象數據模型
    5. 對象關係數據模型
    6. 半結構化數據模型
      • 其中層次模型和網狀模型統稱爲格式化模型
  • 層次模型的數據結構:

    1. 有且只有一個節點沒有雙親結點,這個結點稱爲根節點
    2. 根以外的其他結點有且只有一個雙親結點
      • 層次模型像一棵倒立的樹,節點的雙親是唯一的
  • 網狀模型的數據結構:

    1. 允許一個以上的結點無雙親
    2. 一個結點可以有多於一個的雙親
  • 關係模型數據結構:

    1. 關係(relation):一個關係對應一張表。
    2. 元組(tuple):表中的一行即爲一個元祖。
    3. 屬性(attribute):表中的一列即爲一個屬性
    4. 碼(key):也稱碼鍵。表中的某個屬性組,它可以唯一確定一個元祖。
    5. 域(domain):域是一組具有相同數據類型的值的集合。屬性的取值範圍來自某個域。
    6. 分量:元組中的一個屬性值。
      • 關係模式一般表示爲:關係名(屬性1,屬性2,…,屬性n)
      • 關係模型要求關係必須是規範化的,關係的每一個分量必須是一個不可分的數據項。

1.3 數據庫系統的結構

  • 數據庫系統的三級模式結構是指數據庫系統是由外模式、模式和內模式三機構成。

    1. 外模式:外模式也稱子模式或用戶模式,它是數據庫用戶能夠看見和使用的局部數據的邏輯結構和特徵的描述,是數據庫用戶的數據視圖,是與某一應用有關的數據的邏輯表示。外模式通常是模式的子集,一個數據庫可以有多個外模式。數據庫管理系統提供外模式數據定義語言(外模式DDL)來嚴格地定義外模式。
    2. 模式:模式也稱邏輯模式,是數據庫中全體數據的邏輯結構和特徵的描述,是所有用戶的公共數據視圖。模式實際上是數據庫數據在邏輯級上的視圖,一個數據庫只有一個模式。數據庫管理系統提供模式數據定義語言(模式DDL)來嚴格定義模式。
    3. 內模式:內模式也稱存儲模式,一個數據庫只有一個內模式,它是數據物理結構與存儲方式的描述,是數據在數據庫內部的組織方式。
  • 數據庫系統的三級模式是數據的三個抽象級別,他把數據的具體組織留給數據庫管理系統管理,使用戶能邏輯地、抽象地處理數據,而不關心數據在計算機中的具體表現方式與存儲方式。爲了能夠在系統內部實現這三個抽象層次的聯繫和轉換,數據庫管理系統在這三級模式之間提供了兩層映像:外模式 / 模式映像和模式/內模式映像。

  • 兩層映像保證了數據庫系統中的數據能夠具有較高的邏輯獨立性和物理獨立性
  • 外模式 / 模式映像:當模式改變時,有數據庫管理員對各個外模式/模式映像做相應的改變,可以是外模式保持不變。應用程序是依據數據的外模式編寫的,從而應用程序不必修改,保證了數據與程序的邏輯獨立性,簡稱數據的邏輯獨立性。
  • 模式 / 內模式映像:當數據庫的存儲結構改變時,由數據庫管理員對模式/內模式映像作相應改變,可以使模式保持不變,從而應用程序也不比改變。保證了數據與程序的物理獨立性,簡稱數據的物理獨立性。

1.4 數據庫系統的組成

  1. 硬件平臺級數據庫
  2. 軟件
  3. 人員:
    1. 數據庫管理員:負責全面管理和控制數據庫系統
      1. 決定數據庫中的信息內容和結構
      2. 決定數據庫的存儲結構和存取策略
      3. 定義數據的安全性要求和完整性約束條件
      4. 監控數據庫的使用和運行
      5. 數據庫的改進和重組、重構
    2. 系統分析員:負責應用系統的需求分析和規範說明,要和用戶及數據庫管理員相結合,確定系統的硬件軟件配置,並參與數據庫系統的概要設計
    3. 數據庫設計人員:負責數據庫中數據的確定及數據庫各級模式的設計。
    4. 應用程序員:應用程序員負責設計和編寫應用系統的程序模塊,並進行調試和安裝
    5. 用戶:這裏的用戶指最終用戶。最終用戶通過應用系統的用戶接口使用數據庫。常用的接口有瀏覽器、菜單驅動、表格操作、圖形顯示等。

2.1 關係數據結構及形式定義

  • 域:域是一組具有相同數據類型的值的集合
  • 笛卡爾積:笛卡爾積是域上的一種集合運算
  • 一個域允許的不同取值個數稱爲這個域的基數
  • 若關係中的某一屬性組的值能唯一標識一個元祖,而其子集不能,則稱該屬性組爲候選碼,若一個關係有多個候選碼,則選定其中一個爲主碼
  • 關係有三種類型:基本關係(通常又稱爲基本表或基表)、查詢表和視圖表。
  • 關係數據庫中,關係模式是型,關係是值,關係模式是對關係的描述。

2.2 關係操作

  • 關係模式中常用的關係操作包括查詢(query)操作和插入(insert)、刪除(delete)、修改(update)操作兩大部分
  • 查詢操作又可以分爲選擇(select)、投影(project)、連接(join)、除(divide)、並(union)、差(except)、交(intersection)、笛卡爾積等。其中選擇、投影、並、差、笛卡爾積是 5 種基本操作。
  • 關係數據語言分爲:
    1. 關係代數語言
    2. 關係演算語言
      1. 元組關係演算語言
      2. 域關係演算語言
    3. 具有關係代數和關係演算雙重特點的語言-結構化查詢語言

2.3 關係的完整性

  • 關係模型中有三類完整性約束:實體完整性、參照完整性和用戶自定義完整性。其中實體完整性和參照完整性是關係模型必須滿足的完整性約束條件,被稱作是關係的兩個不變性。
  • 實體完整性規則:若屬性(指一個或一組屬性)A 是基本關係 R 的主屬性,則 A 不能取空值(nullvalue)。所謂空值就是“不知道”或“不存在”或“無意義”的值。
  • 參照完整性規則:若屬性(或屬性組)F 是基本關係 R 的外碼,它與基本關係 S 的主碼 K 相對應(基本關係 R 和 S 不一定是不同的關係),則對於 R 中每個元組在 F 上的值必須:

    1. 或者取空值(F 的每個屬性值均爲空值)
    2. 或者等於 S 中某個元組的主碼值
  • 用戶自定義完整性就是針對某一具體關係數據庫的約束條件,它反應某一具體應用所涉及的數據必須滿足的語義要求。

2.4 關係代數

  • 傳統的集合運算是二目運算,包括並、差、交、笛卡爾積 4 種運算。
  • 專門的關係運包括選擇、投影、連接、除等運算。

3.1 SQL 概述

  • SQL 集數據查詢、數據操縱、數據定義和數據控制功能於一體,其主要特點包括:

    1. 綜合統一
    2. 高度非過程化
    3. 面向集合的操作方式
    4. 以同一種語法結構提供多種使用方式
    5. 語言簡潔,易學易用
  • 支持 SQL 的關係數據庫管理系統同樣支持關係數據庫三級模式結構。其中外模式包括若干視圖和部分基本表,數據庫模式包括若干基本表,內模式包括若干存儲文件。

3.2 學生-課程數據庫

  • 學生表:Student(Sno,Sname,Ssex,Sage,Sdept)
  • 課程表:Course(Cno,Cname,Cpno,Ccredit)
  • 學生選課表:SC(Sno,Cno,Grade)

3.3 數據定義

- 創建 刪除 修改
模式 CREATE SCHEMA DROP SCHEMA
CREATE TABLE DROP TABLE ALTER TABLE
視圖 CREATE VIEW DROP VIEW
索引 CREATE INDEX DROP INDEX ALTER INDEX

- 一個關係數據庫管理系統的實例中可以建立多個數據庫,一個數據庫中可以建立多個模式,一個模式下通常包括多個表、視圖和索引等數據庫對象。
- 定義模式:
CREATE SCHEMA <模式名> AUTHORIZATION <用戶名>

  • 刪除模式:
    DROP SCHEMA <模式名><CASCADE | RESTRICT>

  • 定義基本表:
    CREATE TABLE <表名> (<列名><數據類型> [列級完整性約束條件] ...)

  • 建立一個 “學生” 表 Student

    CREATE TABLE Student (
        Sno CHAR(9) PRIMARY KEY,
        Sname CHAR(20) UNIQUE,
        Ssex CHAR(2),
        Sage SMALLINT,
        Sdept CHAR(20)
    );
  • 數據類型
數據類型 含義
CHAR(n),character(n) 長度爲 n 的定長字符串
varchar(n),charactervarying(n) 最大長度爲 n 的變長字符串
CLOB 字符串大對象
BLOB 二進制大對象
INT, INTEGER 長整數
smallint 短整數
bigint 大整數
real 單精度浮點數
double persision 雙精度浮點數
float(n) 可選精度的浮點數
boolean 邏輯布爾量
date 時間,年月日
time 時間,時分秒
timestamp 時間戳類型
interval 時間間隔類型

- 模式與表
CREATE TABLE “S-T”.Student(...) /* Student 所屬的模式是 S-T */

  • 修改基本表

    ALTER TABLE <表名>
    [ADD [COLUMN] <新列名><數據結構> [完整性約束]]
    [DROP [COLUMN] <列名> [CASCADE | RESTRICT]]
    [ALTER COLUMN <列名><數據結構>];
  • 向 Student 表增加“入學時間”列,其數據類型爲日期
    ALTER TABLE Student ADD S_entrance DATE;

  • 將年齡的數據類型由字符型改爲整數
    ALTER TABLE Student ALTER COLUMN Sage INT;

  • 增加課程名稱必須取唯一值的約束條件
    ALTER TABLE Course ADD UNIQUE(Cname);

  • 刪除基本表

    DROP TABLE <表名> [RESTRICT | CASCADE];
  • 刪除 Student 表
    DROP TABLE Student CASCADE;

  • 建立索引

    CREATE [UNIQUE] [CLUSTER] INDEX <索引名> ON <表名>(<列名> ...);
  • 修改索引
    ALTER INDEX <舊索引名> RENAME TO <新索引名>;

  • 刪除索引
    DROP INDEX <索引名>

  • 數據查詢

    SELECT [ALL | DISTINCT] <目標表達式> [,<目標表達式列表>] ...
    FROM <表名或視圖名> [,<表名或視圖名> ...] | (<SELECT 語句>) [AS] <別名>
    [WHERE <條件表達式>]
    [GROUP BY <列名 1> [HAVING <條件表達式>]]
    [ORDER BY <列名 2> [ASC | DESC]];
  • 查詢全體學生的學號和姓名

    SELECT Sno, Sname
    FROM Student;
  • 查詢全體學生的姓名、學號、所在系。
    SELECT Sname, Sno, Sdept
    FROM Student;
  • 查詢全部列
    SELECT *
    FROM Student;
  • 查詢全體學生的姓名及其出生年份
    SELECT Sname, 2017-Sage
    FROM Student;
  • 查詢全體學生的姓名、出生年份和所在系,要求用小寫字母表示系名
    SELECT Sname, 'Year of Brith:', 2017-Sage, LOWER(Sdept)
    FROM Student;
  • 查詢選修了課程的學生學號(去掉重複行)
    SELECT DISTINCT Sno
    FROM SC;
  • 查詢所有年齡在 20 歲以下的學生姓名及其年齡

    SELECT Sname,Sage
    FROM Student
    WHERE Sage < 20;
  • 查詢考試成績不及格的學生的學號

    SELECT DISTINCT Sno
    FROM SC
    WHERE Grade < 60;
  • 查詢年齡在 20 ~ 23 歲之間的學生的姓名、系別和年齡
    SELECT Sname,Sdept,Sage
    FROM Student
    WHERE Sage BETWEEN 20 AND 23
  • 查詢年齡不在 20 ~ 23 之間的學生的姓名、系別和年齡
    SELECT Sname,Sdept,Sage
    FROM Student
    WHERE Sage NOT BETWEEN 20 AND 23
  • 查詢既不是計算機系、數學系、也不是信息系的學生的姓名和性別

    SELECT Sname,Ssex
    FROM Student
    WHERE Sdept NOT IN ('CS', 'MA', 'IS');
  • 通配符 % 代表任意長度的字符串

  • 通配符 _ 代表任意單個字符

  • 查詢學號爲 201215121 的學生的詳細情況

    SELECT * 
    FROM Student
    WHERE Sno LIKE '201215121';  等價於 WHERE Sno = '201215121';
  • 查詢所有姓劉的學生的姓名、學號和性別

    SELECT Sname,Sno,Ssex
    FROM Student
    WHERE Sname LIKE ‘劉%’;
  • 查詢所有不是姓劉的學生的姓名、學號和性別

    SELECT Sname, Sno,Ssex
    FROM Student
    WHERE Sname NOT LIKE ‘劉%‘;
  • 查詢所有有成績的學生的學號和課程號
    SELECT Sno,Cno
    FROM SC
    WHERE Grade IS NOT NULL
  • 查詢選修了3號課程的學生的學號和成績,查詢結果按分數的降序排列
SELECT Sno,Grade
FROM SC
WHERE Cno = ’3ORDER BY Grade DESC(default ASC);
  • 查詢全體學生情況,查詢結果按所在系的系號升序排序,同一系中的學生按年齡降序排序。
SELECT * 
FROM Student
ORDER BY Sdept, Sage, DESC;
  • 聚集函數
函數名 功能
COUNT([DISTINCT ALL] <列名>)
COUNT(*) 統計元祖個數
SUM([DISTINCT ALL]] <列名>)
AVG([DISTINCT ALL]] <列名>)
MAX([DISTINCT ALL]] <列名>)
MIN([DISTINCT ALL]] <列名>)

- 查詢學生總數

SELECT COUNT(*)
FROM Student;
  • 查詢選修了課程的學生人數
SELECT COUNT(DISTINCT Sno)
FROM SC;
  • 計算選修了一號課程的學生平均成績
SELECT AVG(Grade)
From SC
WHERE Cno='1';
  • 查詢選修1號課程的學生最高分數
SELECT MAX(Grade)
FROM SC
WHERE Cno='1';
  • 查詢學生201215012選修課程的總學分數。
SELECT SUM(Ccredit)
FROM SC,Course
WHERE Sno='201215012' AND SC.Cno = Course.Cno;
  • 求各個課程號及相應的選課人數
SELECT Cno,COUNT(Sno)
FROM SC
GROUP BY Cno;
  • 查詢選修了三門以上課程的學生學號
SELECT Sno
FROM SC
GROUP BY Sno
HAVING COUNT(*) > 3;
  • 查詢平均成績大於等於 90 分的學生學號和平均成績
SELECT Sno, AVG(Grade)
FROM SC
GROUP BY Sno
HAVING AVG(Grade) >= 90;
  • 查詢每個學生及其選修課的情況
SELECT Student.*, SC.*
FROM Student, SC
WHERE Student.Sno = SC.Sno;
  • 查詢選修 2 號課程且成績在 90 分以上的所有學生的學號和姓名
SELECT Student.Sno, Sname
FROM Student,SC
WHERE Student.Sno=SC.Sno AND SC.Cno = '2' AND SC.Grade > 90;
  • 查詢每個學生的學號、姓名、選修的課程名及成績
SELECT Student.Sno, Sname, Cname, Grade
FROM Student, SC, Course
WHERE Student.Sno=SC.Sno AND SC.Cno=Course.Cno;

3.7 視圖

  • 建立視圖
CREATE VIEW <視圖名> 
AS <子查詢>
[WITH CHECK OPTION];
  • 建立信息系學生的視圖
CREATE VIEW IS_Student
AS
SELECT Sno,sname,Sage
FROM Student
WHERE Sdept='IS';
  • 定義一個反映學生出生年份的視圖
CREATE VIEW BT_S(Sno,Sname, Sbirth)
AS
SELECT Sno,Sname,2014-Sage
FROM Student;

數據庫安全性

  • 數據庫的數據保護主要包括數據的安全性和完整性。
  • 數據庫的安全性是指保護數據庫以防止不合法使用所造成的數據泄露、更改或破壞。
  • 數據庫的不安全因素
    1. 非授權用戶對數據庫的惡意存取和破壞
      • 以保證數據免受未經授權的訪問和破壞,數據庫管理系統提供的安全措施主要包括用戶身份鑑別、存取控制和視圖等技術。
    2. 數據庫中重要或敏感的數據被泄露
      • 爲防止數據泄露,數據庫管理系統提供的主要技術有強制存取控制、數據加密存儲和加密傳輸等。
    3. 安全環境的脆弱性
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章