資料庫設計包含需求設計、邏輯設計、物理設計和維護優化。
為了設計出沒有資料冗餘和資料維護異常的資料結構,我們需要遵循以下規範:資料庫表中的所有欄位都只有單一屬性
單一屬性的列都是由基本的資料型別所構成
設計出來的表都是簡單的二維表
針對這個問題,我們怎麼破呢?我們對上面這個表拆分為3個表:學生表、課程表、學生課程關係表。其中,學生表和課程表只有乙個主鍵,而學生課程關係表有乙個復合主鍵(學生編號,課程),分數完全依賴於這個復合主鍵,因此符合第二正規化。
每乙個非主屬性既不部分依賴於也不傳遞依賴於業務主鍵,也就是在第二正規化的基礎上消除了非主屬性對主鍵的傳遞依賴。
對於學生表,學院依賴於學生編號,而學院位址卻依賴於學院,這就是傳遞依賴,此時,這張表不滿足第三正規化。如果想讓這張表滿足第三正規化就需要繼續對這張表進行拆分。
遵循正規化化的資料庫設計,實現了消除資料冗餘的目的,但是此時資料庫的效能和讀取效率並不是最優的。為了效能和讀取效率的考慮而適當的對資料庫設計正規化的要求進行違反,而允許存在少量的資料冗餘,換句話來說反正規化化就是使用空間來換取時間。
舉個栗子,以我們經常進行下單為例。根據正規化準則,定單表和訂單商品關聯表如下:
訂單表:
訂單商品關聯表:
我們知道查詢訂單時,往往需要知道使用者名稱和使用者手機號,那麼,此時我們就需要將訂單表和使用者表進行關聯查詢。這種設計存在乙個問題,當使用者修改手機號,那麼用舊手機號買的訂單號的手機資訊是新的手機號,而不是舊手機號,這是不符合業務需求的。解決這個問題的辦法就是將使用者名稱和使用者手機號加入到訂單表中。同樣情況,商品的**也存在修改的情況,因此,也需要將支付金額加入到訂單表中,此時,訂單表和訂單商品關聯表如下:
訂單表:
訂單商品關聯表:
資料庫的邏輯設計
oracle優化軟結構 能移出system表空間的東西盡量移出。將程式表和資料表分別存在不同的表空間。減少io操作 索引段不應該與其相關的表存在同乙個表空間。因為dml操作的時候同時會維護所以。alter index index name rebuild tablespace tablespace ...
SQL資料庫設計(一) 需求分析與邏輯設計
今天先來介紹 資料庫設計中的需求分析和邏輯設計 er圖 階段,明天介紹物理設計與維護優化,資料庫設計是非常有意思的 根據系統業務的需要,結合我們所選用的dbms,為這個業務系統構建出最優的資料儲存模型。並建立好資料庫中的表結構,以及表與表之間的關聯關係的過程.使之能有效的對應用系統中的資料進行儲存,...
資料庫設計那些事 第2章 邏輯設計
將需求轉化為資料庫的邏輯模型 通過er圖的形式對邏輯模型進行展示 與所選用的具體的dbms系統無關 關係 乙個關係對應通常所說的一張表。元組 表中的一行即為乙個元組。屬性 表中的一列即為乙個屬性 每乙個屬性都有乙個名稱,稱為屬性名。候選碼 表中的某個屬性組,它可以唯一確定乙個元組。主碼 乙個關係有多...