【數據庫系統概念】第1-3章 數據庫基礎知識入門 知識總結

《數據庫系統概念》第1-3章知識點總結

 

數據庫:由一個互相關聯的數據的集合和一組用以訪問這些數據的程序組成。

元組:指代行

屬性:指代列


在文件處理系統中存儲組織信息的主要弊端:

(1)數據的冗餘和不一致

(2)數據訪問困難

(3)數據孤立

(4)完整性問題

所以我們要有數據庫


數據結構的基礎是數據模型

數據模型是一個描述數據、數據聯繫、數據語義以及一致性約束的概念工具集合。主要模型有以下四種:

(1)關係模型,relational model

(2)實體-聯繫模型,entity-relationship model

(3)基於對象的數據模型,object-based data model

(4)單結構化數據模型,semistructured data model;例如可擴展標記語言(XML)被廣泛地用來表示半結構化數據


實體-聯繫模型

實體集:用矩形框表示,實體名在頭部,屬性名列在下面

聯繫集:用連接一對相關的實體集的菱形表示,聯繫名放在菱形內部

下面是一個例子:



row:

column:

record/taple:元組

attributes:屬性(就是每一列)

domain:域,For each attribute of a relation ,there is a set of permitted values ,called the domain of that attribute.

atomic:原子性,For all relations r ,the domains of all attributes of r be atomic.

null:空,The null value is a special value that signifies that the value is unknown or does not exist.

database schema:數據庫模式,is the logical design of the database.

database instance:數據庫示例,is a snapshot of the data in the database at a given instant in time.

superkey:超碼,is a set of one or more attributes that ,taken collectively ,allow us to identify uniquely a tuple in the relation.

candidate keys:候選碼,the minimal superkeys are called candidate keys.

primary key:主碼,one of the candidate keys is selected to be the primary key


foreign key:外碼,a relation ,say r1 ,may include among its attributes the primary key of another relation ,say r2 .This attribute is called a foreign key form r1 ,referencing r2 .

referencing relation:外碼依賴的參照關係,the relation r1 is called the referencing relation of the foreign key dependency

referenced relation:外碼的被參照關係,r2 is called the referenced relation of the foreign key

 

超碼:一個或多個屬性的集合,這些屬性的組合可以使我們在一個關係中唯一地表示一個元 組

候選碼:最小超碼。因爲超碼中可能包含無關緊要的屬性,候選碼中不存在無關緊要的屬性。

主碼:用來在一個關係中區分不同元組的候選碼,應該選擇那些值從不或極少變化的屬性。 主碼屬性一般列在其他屬性前面,且有下劃線

外碼:一個關係模式(如r1)可能在它的屬性中包括另一個關係模式(如r2)的主碼。這 個屬性在r1上稱作參照r2的外碼。關係r1也稱爲外碼依賴的參照關係,r2叫做外碼 的被參照關係。


數據庫中的常用的關係代數



初級SQL

The SQL language has several parts:

(1)Data_definition language(DDL,數據定義語言)

 ①defining relation schemas(定義關係模式)

 ②deleting relations(刪除關係)

 ③modifying relation schemas(修改關係模式)

(2)Data_manipulation language(DML,數據操縱語言)

 ①query information from the database(查詢信息)

 ②insert tuples into(插入元組)

 ③delete tuples from(刪除元組)

 ④modify tuples(修改元組)

(3)Integrity(完整性)

(4)View definition(視圖定義)

(5)Transaction control(事務控制)

(6)Embedded SQL and dynamic SQL(嵌入式SQL和動態SQL)

(7)Authorization(授權)


SQL的基本類型:

(1)char(n):固定長度的字符串,全稱character,輸入字符數不足n時,追加空格

(2)varchar(n):可變長度的字符串,全稱character varying

(3)int:整數類型,全稱integer

(4)smallint:小整數類型

(5)numeric(p,d):定點數,這個數有p位數字,其中d位數字在小數點右邊。

(6)real,double precision:浮點數與雙精度浮點數

(7)float(n):精度至少爲n位的浮點數

 

以下是幾個後面會用到的表

   

   


創建、定義關係

通用形式是:

create table r

    (A1 D1,

    A2 D2,

    ...,

    An Dn,

    <integrity-constraint1>,

    ...,

    <integrity-constraintk>);

r is the name of the relation

each Ai is the name of an attribute in the schema of relation r

each Di is the domain of attribute Ai

下面是一個具體的例子

 

primary key(A1,A2....):聲明屬性A1,A2....爲關係的主碼

foreign key(A1,A2....) references:聲明表示關係中任意元組在屬性(A1,A2....)上的取 值必須對應於關係s中某元組在主碼屬性上的取值

not null:不允許空值

 

單關係查詢

(1)

 

(2)刪除重複:distinct

 

(3)不去除重複:all,不過一般這是默認的,不需要寫出來

 


where:用於選出那些在from子句的結果關係中滿足特定謂詞的元組

where中可以使用邏輯連詞and or not。

 

多關係查詢

 


自然連接

運算作用於兩個關係,併產生一個關係作爲結果。只考慮那些在兩個關係模式中都出現的屬性上取值相同的元組對

from子句中的“instructor natural join teaches”表達式可以替換成執行該自然連接後所得到的關係

   ====


連接

join...using(A1,A2)  在t1.A1=t2.A1且t1.A2=t2.A2成立的前提下,來自r1的元組t1和來自r2的元組t2就能匹配


更名運算

old-name as new-name   as子句既可出現在select子句中,也可以出現在from子句中

 

此處重新命名的標識符被稱作相關名稱、表別名、相關變量、元組變量

 

字符串運算

用like操作符來實現模式匹配,以下是兩個特殊的字符

百分號(%):匹配任意子串

下劃線(_):匹配任意一個字符

轉義字符:用escape來定義,放在特殊字符前面使特殊字符得以顯示

例:like ‘ab \% cd %’ escape‘\’   匹配所有以ab % cd開頭的字符串

 

select子句中的屬性說明

星號‘*’可以用在select子句中表示“所有的屬性”

 

 

元組的排序

order by xxx    表示按照xxx排序

desc表示降序

asc表示升序,沒有說則默認爲升序

 


where子句謂詞

用between來表示一個區間,也可用not between

 

where子句謂詞2

可以用記號(V1,V2,...,Vn)來表示一個分量值分別爲V1,V2,...,Vn的n維元組

以下2段相等:

 

 

集合運算:並運算(union)、交運算(intersect)、差運算(except)

並運算

union運算自動去除重複,如果想保留所有重複,則用union all

 

交運算

intersect運算自動去除重複,如果想保留所有重複,則用intersect all

 

差運算

except運算自動去除重複,如果想保留所有重複,則用except all

 

空值null

算術運算:如果算術表達式的任一輸入爲空,則該算術表達式(+ - * /)結果爲空。

比較運算:涉及空值的任何比較運算的結果視爲unknown。unknown是除true和false之外的第三個邏輯值

集合運算:

and:true and unknown = unknown

   false and unknown = false

   unknown and unknown = unknown

or:true or unknown = true

   false or unknown = unknown

   unknown or unknown = unknown

notnot unknown = unknown

如果where子句謂詞對一個元組計算出false和unknown,那麼該元組不能被加入到結果中。

 

聚集函數

聚集函數是以值的一個集合(集或多重集)爲輸入,返回單個值的函數。

平均值:avg

最小值:min

最大值:max

總和:sum

計數:count

sum和avg的輸入必須是數字集

 

基本聚集

找出Computer Science系教師的平均工資

 

找出在2010年春季學期講授一門課程的教師總數(去除了重複)

 

找出course關係中的元組數

 

 

分組聚集

group by子句中的所有屬性上取值相同的元組被分在一個組中

 

注意:任何沒有出現在group by子句中的屬性如果出現在select子句中的話,它只能出現在聚集函數的內部,否則錯誤。例如,下述查詢是錯誤的,因爲ID沒有出現在group by子句中,但它出現在了select子句中,而且沒有被聚集

 

 

having子句

having子句中的謂詞在形成分組後才起作用,也就是針對group by子句構成的分組

找出教室平均工資超過42000美元的系

 

注意:任何出現在having子句中,但沒有被聚集的屬性必須出現在group by子句中,否則錯誤。


SQL語句的執行順序

from語句——where語句——group by語句——having語句——select語句


對空值和布爾值的聚集

除了count(*)外所有聚集函數都忽略輸入集合中的空集,空集的count運算值爲0。

 

嵌套子查詢

集合成員資格

連接詞in測試元組是否是集合中的成員

找出在2009年秋季和2010年春季學期同時開課的所有課程

 

括號中爲子查詢

 

集合的比較

some(至少):至少比某一個大—— >some

  <some  <=some  >=some  >some  =some  <>some

=some 等價於in

≠some 不等價於not in

找出滿足下面條件的所有教師的姓名,她們的工資至少比Biology系某一個教師的工資要高

all(所有):比所有的都大—— >all

  <all  <=all  >=all  >all  =all  <>all

=all 不等價於in

≠all 等價於not in

找出滿足下面條件的所有教師的姓名,她們的工資比Biology系每個教師的工資都高

 

空關係測試

exists結構可測試一個子查詢的結果中是否存在元組,非空時返回true值。

not exists結構測試子查詢結果中集中是否不存在元組

可以使用not exists結構模擬集合的【包含】操作:我們可以將“關係A包含關係B”寫成not exists(B except A)

請看下面例子:

找出選修了Biology系開設的所有課程的學生

 

重複元組存在性測試

unique結構,測試在一個子查詢的結果中是否存在重複元組,如果作爲參數的子查詢結果中沒有重複的元組,則返回true值

找出所有在2009年最多開設一次的課程

 


lateral關鍵詞

在from子句嵌套的子查詢中並不能使用來自from子句其他關係的相關變量,而from子句其他關係的相關變量可以使用嵌套的子查詢中的變量。

在from子句中的子查詢添加關鍵詞lateral作爲前綴,就可以訪問from子句中在它前面的表或子查詢中的屬性,例如

打印每位教師的姓名,以及他們的工資和所在系的平均工資



with子句

with子句提供定義臨時關係的方法,這個定義只對包含with子句的查詢有效

找出具有最大預算值的系

 

with子句定義了臨時關係max_budget,此關係在隨後的查詢馬上被使用了

 

 

數據庫的修改

刪除:只能刪除整個元組,而不能只刪除某些屬性上的值

 

插入:待插入元組的屬性值必須在相應屬性的域中,並且分量數必須是正確的,且元組屬性值的排列順序和關係模式中屬性排列的順序一致。

 

更新:在不改變整個元組的情況下改變其部分屬性的值

 

 

case結構

 

 

 注:圖片均來自《數據庫系統概念》第6版——機械工業出版社

 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章