有關主鍵與外來鍵
一般而言,乙個實體不能既無主鍵又無外來鍵。在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...