第二章 建立資料模型 ER模型 完整性約束

2021-10-18 21:36:38 字數 3280 閱讀 5003

在進行資料庫建立之前,我們需要對實際問題進行模型的建立,我們需要將現實世界中事物和事物的性質以及事物之間的聯絡抽象出來,而這一過程最常用的手段就是e-r模型設計

本章內容最重要的兩件事就是掌握:er模型的設計和er模型向關係模型的轉化

幕布鏈結

稍微區分下概念模型和資料模型,兩者本質上都是對現實世界事物的抽象描述,但是概念模型側重於以簡單清晰的方式將模型展現給使用者,側重於模型的表示,而資料模型側重於資料庫的設計(後面會介紹)。也就是說兩者的作用點不一樣。

概念模型的基本概念

概念模型常用e-r圖來表示,e-r模型全稱是entity-relationship model,可以看出他是對實體之間關係的一種描述,下面介紹其基本概念:

e-r圖的基本表示方法

e-r圖中三個主要概念:實體集、聯絡集和屬性

看下圖:

如圖所示,用方形表示實體,用菱形表示聯絡,橢圓形表示屬性。(下劃線表示碼)

聯絡之間有一對一一對多多對多的聯絡,這三種聯絡就不贅述了。

需要注意的是:

1.資訊世界中兩個實體集之間的聯絡往往只有一種

2.同一實體集內的各個實體也可能有某種聯絡

多元聯絡

如上圖所示,多元聯絡是指乙個聯絡可以連線多個實體

聯絡的屬性

在多對多的關係中會存在這樣的麻煩:

比如演員簽約電影這種關係,乙個演員可以簽約多部電影,一部電影也可以有多個演員簽約,當我們儲存報酬這個屬性的時候,不可能把這個屬性放到演員這張表裡面,因為乙個演員可能簽約多部電影(在rdbms中不會用陣列這種資料結構,核心觀念是關係也就是表這種結構),也不會把這個放在電影這個表裡面,因為一部電影也會有多個演員簽約。

那麼在這種關係下,一般會給這種聯絡乙個屬性,放在實踐中去理解,在django框架下, 多對多關係都會存在一張表,這張表專門去儲存這種聯絡的屬性。

比如說剛剛的簽約表,實體型應該是這樣簽約(演員id,電影id,報酬)

自身聯絡

最常見的自身聯絡就是朋友,使用者和使用者之間會有朋友的關係,放在這裡來講就是,使用者這個實體和自己有聯絡:

弱實體集

從邏輯上來講,這種實體是沒有的(本身屬性不足以構成碼),如之前說的多對多關係,衍生出來的乙個新的實體集(簽約),這個實體集是依賴於演員的碼和電影的碼來確定唯一實體的。這種實體就稱為弱實體。

這個設計方法這裡不做贅述,但要注意冗餘的概念,在設計的時候應該盡可能的減少實體集中屬性的冗餘,比如某乙個屬性可以直接由其他屬性計算出來,那麼就不需要這個屬性,原因:

浪費儲存空間

破壞資料完整性

對於第二點的解釋: 如果某個屬性的值發生變化,和這個屬性相關的值可能也要發生變化,比如說實發工資由基本工資+保險+…等其他屬性通過計算得到,基本工資變了,實發工資也要變化,這樣就可能造成資料不一致的風險。

這裡作為常識來學習

資料模型就是一種資料結構,常見的資料模型有:

層次模型

網狀模型

關係模型

物件導向模型

現在主流的資料模型就是關係模型(關係型資料庫)

這裡主要介紹關係模型的一些基本概念

主要術語

關係(relation):實際上就是一張二維表,

元組(tuple):關係(表)中的一行資料總稱為乙個元組,關係中不允許有相同的元組

分量(component):乙個元組在乙個屬性上的值稱為該元組在此屬性上的分量

主碼(primary key):與候選碼做區分,在乙個關係中,候選碼可能有多個,主碼是在候選碼中選擇乙個,然後這個碼就稱為主碼,主碼在關係中只能有乙個

主屬性(main attribute):包含在任何乙個候選碼中的屬性就是主屬性,注意,候選碼有多個,只要是在候選碼中的屬性都是主屬性,其餘的屬性稱為非主屬性(非碼屬性)

外部碼(foreign key): 在關係1中記錄了關係2的碼,這個碼稱為關係1的外部碼,比如一對多關係:學生和班級,乙個班級可以對應多個學生,但是乙個學生只能有乙個班級,那麼學生這張表就是要儲存乙個外部碼(班級的碼),記錄每個學生所在班級

關係模式:和前面的實體型是乙個概念

關係模式有六個基本性質,這裡我只想說一點,其餘的都是很常見的。

每個關係的分量值都是原子的,是不可再分割的基本資料項如:

在工資這一列就出現了可分割的情況,這是不行的。

關係的完整性約束

實體完整性(entity integrity)

主屬性不能為空值(即任一候選碼的屬性不能為空)

在實際上,只用到主碼,即主碼屬性不為空就好

參照完整性(referential integrity)

這是對外部碼的約束:

外部碼只能有兩種取值情況:

這個碼在對應的表中是存在的空值

使用者自定義完整性

不贅述er模型向關係模型的轉化

所謂轉化,就是把er模型轉成關係模式的形式,這個地方掌握基本要求就好(一對多關係會有外碼,多對多關係會產生一張新的表)

第二章 聚合資料模型

nosql技術與傳統的關聯式資料庫相比,最明顯的轉變是拋棄了關係模型。nosql主要有四種模型 前三種都是面向聚合的 2.1 聚合 關係模型 元組 行 是受限的結構 只能包含一系列的值,不能巢狀另外的元組和列表。所有操作都以元組為目標,而且其返回值必須是元組。面向聚合 是nosql運算元據時所用的單...

第二章 資料模型和查詢語言

本章開始介紹了關係型資料庫,非關係型資料庫,圖模型資料。首先解釋了關係模型和文件模型是什麼,然後指出了從資料庫模型到應用程式物件模型之間的不匹配 稱為物件關係不匹配 我們通常使用 orm 框架來解決從資料庫模型到程式物件的轉換。接著引出了一對多 多對 一 多對多關係以及查詢的區域性性。和 json ...

第二章 過程模型

基於構件的開發,併發模型,演化過程模型,形式化過程模型,通用過程模型,增量過程模型,慣用過程模型,過程模式。2.1通用過程模型 在軟體過程中,技術工作的層次包括活動,活動由動作構成,動作由任務組成。過程定義為在工作產品構建過程中,所需完成的工作活動,動作和任務的集合。這些活動,動作,任務中的每乙個都...