
1. 自增長 primary key
采用自增長 primary key主要是性能。早期的數據庫系統,經常采用某種編號,比如身份證號碼,公司編號等等作為數據庫表的 primary key。然而,很快,大家就發現其中的不利之處。
比如早期的醫院管理系統,用身份證號碼作為病人表的 primary key。然而,第一,不是每個人都有身份證;第二,對于國外來的病人,不同國家的病人的證件號碼并不見得沒有重復。因此,用身份證號碼作為病人表的 primary key是一個非常糟糕的設計。考慮到沒有醫生或者護士會刻意去記這些號碼,使用自增長 primary key是更好的設計。
公司編號采用某種特定的編碼方法,這也是早期的數據庫系統常見的做法。它的缺點也顯而易見:很容易出現像千年蟲的軟件問題,因為當初設計數據庫表的時候設計的位數太短,導致系統使用幾年后不能滿足要求,只有修改程序才能繼續使用。問題在于,任何人設計系統的時候,在預計某某編號多少位可以夠用的時候,都存在預計不準的風險。而采用自增長 primary key 則不存在這種問題。同樣的道理,沒有人可以去記這些號碼。
使用自增長 primary key另外一個原因是性能問題。略有編程常識的人都知道,數字大小比較比字符串大小比較要快得多。使用自增長 primary key可以大大地提高數據查找速度。
2. 避免用復合主鍵 (compound primary key)
這主要還是因為性能問題。數據檢索是要用到大量的 primary key 值比較,只比較一個字段比比較多個字段快很多。使用單個 primary key 從編程的角度也很有好處, sql 語句中 where 條件可以寫更少的代碼,這意味著出錯的機會大大減少。
3. 雙主鍵
雙主鍵是指數據庫表有兩個字段,這兩個字段獨立成為主鍵,但又同時存在。 數據庫系統的雙主鍵最早用在用戶管理模塊。最早的來源可能是參照操作系統的用戶管理模塊。
操作系統的用戶管理有兩個獨立的主鍵:操作系統自己自動生成的隨機 ID (Linux, windows 的 SID), login id。這兩個 ID 都必須是唯一的,不同的是,刪除用戶 test 然后增加一個用戶 test, SID 不同,login id 相同。采用雙主鍵主要目的是為了防止刪除后增加同樣的 login id 造成的混亂。比如銷售經理 hellen 本機共享文件給總經理 peter, 一年后總經理離開公司,進來一個普通員工 peter ,兩個peter 用同樣的 login id, 如果只用 login id 作操作系統的用戶管理主鍵,則存在漏洞:普通員工 peter 可以訪問原來只有總經理才能看的文件。操作系統自己自動生成的隨機 ID 一般情況下面用戶是看不到的。
雙主鍵現在已經廣泛用在各種數據庫系統中,不限于用戶管理系統。
4. 以固定的數據庫、表應付變化的客戶需求
這主要基于以下幾個因素的考慮:
4.1 大型 EPR 系統的正常使用、維護需要軟件廠商及其眾多的合作伙伴共同給客戶提供技術服務,包括大量的二次開發。
如果用戶在軟件正常使用過程中需要增加新的表或者數據庫,將給軟件廠商及其眾多的合作伙伴帶來難題。
4.2 軟件升級的需要。
沒有一個軟件能夠讓客戶使用幾十上百年不用升級的。軟件升級往往涉及數據庫表結構的改變。軟件廠商會做額外的程序將早期版本軟件的數據庫數據升級到新的版本,但是對于用戶使用過程中生成的表進行處理就比較為難。
CIO頻道人物視窗
CIO頻道方案案例庫
大數據建設方案案例庫
電子政務建設方案案例庫
互聯集成系統構建方案案例庫
商務智能建設方案案例庫
系統集成類軟件信息研發企業名錄