資料庫設計的一些感想

2021-06-21 14:01:27 字數 1899 閱讀 3104

有關主鍵與外來鍵

一般而言,乙個實體不能既無主鍵又無外來鍵。在e—

r 圖中

, 處於葉子部位的實體

, 可以定義主鍵,也可以不定義主鍵(因為它無子孫)

, 但必須要有外來鍵(因為它有父親)。

主鍵作用是保持唯一性

,外來鍵的作用是資料庫的完整性,說白了

,就是乙個表某一列的內容

來自於另乙個表的

一列,不能隨便刪除外來鍵所在的表,保持兩個表一致性,主要是從表和主表資料一致。當然按照各位前輩們的經驗

,資料庫設計的時候新增主外來鍵

,但一般開發的時候先不新增

,等到系統完成的時候再新增

,否則會給系統開發帶來很大的麻煩

,當然也有公司自始至終不新增主外來鍵

,而他們的資料一致性等問題是在專案中使用**來維護的

.主鍵是供程式設計師使用的表間連線工具,可以是一無物理意義的數字串

, 由程式自動加

1來實現

,這樣效率很高

,處理簡潔

,當然也可以使用字元和數字的混合體

.也可以是有物理意義的欄位名或欄位名的組合。不過前者比後者好。

有關三個正規化

理解三個正規化,對於資料庫設計大有好處。在資料庫設計中,為了更好地應用三個正規化,那自然是透徹的理解三正規化.

沒有冗餘的資料庫設計可以做到。但是,沒有冗餘的資料庫未必是最好的資料庫,有時為了提高執行效率,就必須降低正規化標準,適當保留冗餘資料。具體做法是:在概念資料模型設計時遵守第三正規化,降低正規化標準的工作放到物理資料模型設計時考慮。降低正規化就是增加字段,允許冗餘。

有關實體多對多的關係

若兩個實體之間存在多對多的關係,則應消除這種關係。消除的辦法是,在兩者之間增加第三個實體。這樣,原來乙個多對多的關係,現在變為兩個一對多的關係。要將原來兩個實體的屬性合理地分配到三個實體中去。這裡的第三個實體,實質上是乙個較複雜的關係,它對應一張基本表。一般來講,資料庫設計工具不能識別多對多的關係,但能處理多對多的關係。

雖然第三張表有其優點

,但是不呢個亂用第三張表

,最近做的系統資料庫設計中就過度的使用了第三張表

,導致了各個子系統讀取運算元據的時候變的特別複雜難以維護

,並且效率極其低下

.解決方法是

,合適使用第三張表

,對於一對一

,一對多的關係一般用主外來鍵最好

.多對多的關係則需要第三張表來維護關係

.有關資料冗餘

主鍵與外來鍵在多表中的重複出現,不屬於資料冗餘,這個概念必須清楚,事實上有許多人還不清楚。非鍵字段的重複出現,才是資料冗餘!而且是一種低階冗餘,即重複性的冗餘。高階冗餘不是欄位的重複出現,而是欄位的派生出現。

比如商品中的「單價、數量、金額」三個字段,「金額」就是由「單價」乘以「數量」派生出來的,它就是冗餘,而且是一種高階冗餘。冗餘的目的是為了提高處理速度。只有低階冗餘才會增加資料的不一致性,因為同一資料,可能從不同時間、地點、角色上多次錄入。因此,我們提倡高階冗餘(派生性冗餘),反對低階冗餘(重複性冗餘)。

有關檢視

與基本表不同,檢視是一種虛表,它依賴資料來源的實表而存在。檢視是供程式設計師使用資料庫的乙個視窗,是基表資料綜合的一種形式

, 是資料處理的一種方法,是使用者資料保密的一種手段。為了進行複雜處理、提高運算速度和節省儲存空間

, 檢視的定義深度一般不得超過三層。

若三層檢視仍不夠用

, 則應在檢視上定義臨時表

, 在臨時表上再定義檢視。這樣反覆交迭定義

, 檢視的深度就不受限制了。

提高資料庫執行效率的辦法

在給定的系統硬體和系統軟體條件下,提高資料庫系統的執行效率的辦法是:

總之,資料庫設計的實用原則是:在資料冗餘和處理速度之間找到合適的平衡點。

要提高資料庫的執行效率,必須從資料庫系統級優化、資料庫設計級優化、程式實現級優化,這三個層次上同時下功夫。

資料庫主鍵策略的一些感想

目前在做乙個rss收集相關的web系統。1.資料庫是使用多台mysql。2.用mysql 的 replication來分離讀寫。3.根據使用者id來分布資料庫中的資料。問題 1.mysql沒有像oracle中的sequence。自製sequence的話怕影響效率。2.採用mysql中的自增長主鍵,在...

資料庫設計的一些有效經驗

以下是針對事務型資料庫 1.是否使用聯合主鍵?個人傾向於少採用聯合主鍵。因為這樣會降低索引的效率,聯合主鍵一般都要用到至少乙個業務字段,往往是字串型的,而且理論上多字段的索引比單字段的索引要慢些。看上去似乎也不那麼清爽。在實際的設計中,我盡量避免使用聯合主鍵,有些時候 不得不 使用聯合主鍵。2.pk...

資料庫設計的一些問題

原則 如果列中要儲存的資料長度差不多一致的,則因該考慮用char 否則因該考慮用varchar。如果列中的最大資料長度小於50byte,則一般也考慮用char。當然如果這個列很少用,則基於節省空間和減少i o的考慮,還是可以選擇varchar 一般不宜定義大於50byte的char型別列。原則 de...