復習三——關系數據模型
數據模型
描述現實世界實體,實體間聯系以及數據語義和一致性約束的模型。這個定義看起來沒什麽實際用途,但是理解了對使用power designer設計數據庫有好處。嘛。。。反正我沒理解透。
按照模型應用的不同目的,可以分為
- 概念數據模型(概念模型):按用戶的觀點對數據進行建模,強調語義表達功能。主要用於數據庫的概念設計。
- 結構數據模型(數據模型):按計算機系統的觀點對數據進行建模,直接面向數據庫的邏輯結構。
現實世界——>信息世界 概念模型(如E-R模型,即實體-聯系模型)——>機器世界 數據模型
數據模型的三要素
- 數據結構:實體之間的聯系
- 數據操作:檢索和更新的實現
- 數據的完整性約束:數據之間的聯系具有的制約和依賴關系
關系模型
形式化定義
R(U,D,dom,F)
R為關系模式名,U是屬性集,D是U中屬性的值所來自的值域,Dom是屬性向域的映射集合,F是屬性間的依賴關系。可以簡寫為
R(U)
重要概念
超碼(Super Key)
唯一標識一個元組的屬性集
候選碼(Candidate Key)
不含多余屬性的超碼。包含在任何一個候選碼的屬性成為主屬性(Primary Attribute),否則稱為非主屬性。
主碼(Primary Key)
用戶選作元組標識的一個候選碼稱為主碼,其余的候選碼稱為替換碼(Alternate Key)。
外碼(Foreign Key)
關系模式R的外碼是它的一個屬性集FK,滿足:
- 存在帶有候選碼CK的關系模式S
- R的任一非空FK值在S的CK中有一個相同的值
S稱為被參照關系,R稱為參照關系。
總之就是說,我的屬性裏用到你的已經有的屬性,並且那個屬性被你用來當作候選碼。比如銀行系統裏面,如果bank表有屬性name,staff表裏面有屬性bank_name,並且bank_name的實例來自name已經有的實例,就說bank_name是外鍵,引用bank的name屬性。
被引用了的表不能夠直接刪除(參照完整性)。比如bank裏面有中國銀行,staff裏面有小明,來自中國銀行。如果直接把bank刪除,那麽小明來自的中國銀行就無從查找來自何處。有些數據庫系統提供刪除的級聯操作,就是說,刪除bank表的同時,把其他表中所有引用了它的實例都刪除掉,mysql提供這種操作,不過需要解除外鍵檢查。
SET FOREING_KEY_CHECKS=0
oracle就不支持級聯刪除。官方給出的解釋是:這是沒有意義的操作。想要刪除的話,需要先刪掉相應的外鍵約束,刪除之後再加上外鍵約束。
三類完整性規則
- 實體完整性(Entity Integrity):主碼的所有屬性不可為空
- 參照完整性(Referential Integrity):參照關系R的任意一個外碼值必須來自於參照關系S中所參照的候選碼的某個值,或者為空。
- 用戶自定義完整性(User-Defined Integrity):針對某一數據的約束條件,比如成績取值0到100,或者性別不能為空啥的。
關系代數
並
返回兩個關系中所有元組
交
返回兩個關系共同的元組
差
返回屬於第一個關系但不屬於第二個關系的元組
笛卡爾積
返回兩個關系的元組的任意組合所得到的元組集合
選擇
返回指定關系中滿足給定條件的元組
投影
返回指定關系中去掉若幹屬性後所得的元組
聯接
從兩個關系的笛卡爾積中選區屬性間滿足給定條件的元組
- 自然聯接:相當於在R×S中選取R和S的所有公共屬性值都相等的元組,並在結果中去掉重復屬性
- θ聯接:相當於在R×S中選取R的屬性A值與S的屬性B值滿足比較關系θ的元組。
- 等值聯接:θ關系為相等的時候,即為等值聯接。比較的屬性是兩個公共屬性時,為自然聯接。
除
除的結果與第二個關系的笛卡爾積包含在第一個關系中
(氣死我了,這個編輯器竟然不支持latex數學公式的編輯,好多符號打不出來)
附加的關系代數操作
擴展投影(廣義投影)
投影列表可以是R的一個或多個屬性,或者是重命名得出的屬性,或者通過原關系模式多個屬性運算得出的新屬性。
聚集函數(aggregate)
- SUM(求和)
- COUNT(計數)
- AVG(求均值)
- MAX(求最大值)
- MIN(求最小值)
分組(Group)
排序(sort)
賦值
數據更新
(感覺如果不是需要使用這些理論上的關系代數運算,可以直接看mysql或者oracle等的相關對應操作的解釋或教程。菜鳥教程
復習三——關系數據模型