python學習筆記 day44 資料庫三正規化

2022-02-06 18:53:33 字數 1425 閱讀 9943

為了建立減少冗餘,結構合理的資料庫,涉及資料庫時必須要遵守一定的規則,在關聯式資料庫中,這種規則就成為正規化,正規化是符合某一種涉及要求的總結,要想設計乙個合理的關係型資料庫必須要滿足一定的正規化(正規化簡單來說局勢為了保證建立合理的資料庫,在建立資料庫時就應該遵守的一些規則)

第一正規化時最基本的正規化,如果資料庫表中所有字段值都是不可分解的原子值,說明該資料庫滿足第一正規化

該錶就滿足了第一正規化的需求,這樣對使用者使用城市進行檢索時就會很方便~

第二正規化需要確保資料庫表中的每一列都和主鍵相關,而不能只與主鍵的某一部分相關(主要針對聯合主鍵而言)。也就是說在乙個資料庫表中,乙個表中只能儲存一種資料,不可以把多種資料儲存在同一張資料庫表中。

比如要設計乙個訂單資訊表,因為訂單中可能會有多種商品,所以要將訂單編號和商品編號作為資料庫表的聯合主鍵,如下表所示

這樣就產生乙個問題:這個表中是以訂單編號和商品編號作為聯合主鍵。這樣在該表中商品名稱、單位、商品**等資訊不與該錶的主鍵相關,而僅僅是與商品編號相關。所以在這裡違反了第二正規化的設計原則。

而如果把這個訂單資訊表進行拆分,把商品資訊分離到另乙個表中,把訂單專案表也分離到另乙個表中,就非常完美了。如下所示。

比如在設計乙個訂單資料表的時候,可以將客戶編號作為乙個外來鍵和訂單表建立相應的關係。而不可以在訂單表中新增關於客戶其它資訊(比如姓名、所屬公司等)的字段。如下面這兩個表所示的設計就是乙個滿足第三正規化的資料庫表。

這樣在查詢訂單資訊的時候,就可以使用客戶編號來引用客戶資訊表中的記錄,也不必在訂單資訊表中多次輸入客戶資訊的內容,減小了資料冗餘。(也就是兩個表中可以通過外來鍵關聯,一張表之可以放該表相關的字段,最多再放乙個跟另一張表的主鍵關聯的外來鍵)而不能把兩張表的資訊直接堆砌在一起

第二正規化是針對聯合主鍵的情況,為了確保每一列都和主鍵相關,需要把融合了很多表資訊的那張綜合雜亂無章表拆分成多張表,每一張表之反應與之相關的資訊,而第三正規化 是針對兩個表有聯合欄位時,一張表最多保留另一張表關聯的字段,也就是設為外來鍵的那個字段,不可以再新增另一張表的其他字段資訊;

第二正規化是在一張表中包含了不同實體的屬性,那麼必須分成多張表,第三正規化時要求已經分好了多張表,一張表只能有另一張表的id 而不可以有其他資訊(其他資訊一律使用主鍵在另一張表 關聯外來鍵中查詢) 

必須滿足第一正規化才能滿足第二正規化;

必須同時滿足第一正規化 第二正規化才能滿足第三正規化;

python基礎一 day44 筆記

內容回顧 1.函式程式設計 資料和邏輯分離 a 123 b 456 c 789 def exc3 proc name callproc return def exc4 proc name callproc return 2.物件導向 資料和邏輯 屬性和行為 組合在一起 class sqlhelper...

python全棧開發 day44 前端html學習

html 1d css 2d js 2d jquery 1d bootstrap 1d 前端1.什麼是前端?任何直接能夠跟使用者打交道的互動介面都可以稱之為前端 2.為什麼要學前端?因為我們是python全棧開發 軟體開發架構 c s架構 b s架構 本質上b s也是c s架構 瀏覽器輸入 傳送了幾...

Day4 4 堵車去暹羅商圈吃午餐

除了大皇宮,緊隨其後的就是暹羅商圈了,兩個都是很堵的地方,從大皇宮去暹羅商圈,有一段距離有了上午坐的士的經歷,就決定接著坐的士。這次用grab可謂是等司機接單等了最久的一次了,差不多有五分鐘,看來的士司機還是不願意去這些堵車的地方。這裡也有不少嘟嘟車,但是可能會不安全,就不大敢坐。而且大多數嘟嘟車都...