国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

是否有必要使用外鍵?為什么不用外鍵?

2024-07-21 02:48:10
字體:
來源:轉載
供稿:網友
是否有必要使用外鍵?為什么不用外鍵?正方(需要) 1.數據一致性 由數據庫自身保證數據一致性,完整性,更可靠,因為程序很難100%保證數據 的完整性,而用外鍵即使在數據庫服務器當機或者出現其他問題的時候,也能夠最大限度的保證數據的一致性和完整性。 eg:數據庫和應用是一對多的關系,A應用會維護他那部分數據的完整性,系統一變大時,增加了B應用,A和B兩個應用也許是不同的開發團隊來做的。他們如何協調保證數據的完整性,而且一年以后如果又增加了C應用呢? 2.ER圖可靠性 有主外鍵的數據庫設計可以增加ER圖的可讀性,這點在數據庫設計時非常重要。 3.使設計更全面 外鍵在一定程度上說明的業務邏輯,會使設計周到具體全面 4.級聯性能未必最低 除非能證明觸發器的性能和可維護性比外鍵更優,否則憑什么一定要否定外鍵呢? 5.程序能完全保證安全性嗎? 使用應用程序來維護數據完整性,則是嚴重降低數據庫安全性的一種做法。連接字符串里如果有uid和pwd或者類似的這兩個東西,可以使用工具獲取你數據庫的帳號。因為每次建立數據庫聯接的時候都會在網線上以標準格式傳遞這些信息。從此編碼內的任何保證都是空的。 6.導致冗余 不使用外鍵,會導致數據冗余,在級聯最底層的表可能會重復好幾層的數據 必然導致最底層的表數據量翻倍,IO瓶頸是數據庫性能瓶頸之一。_____________________________________________________________________反方(不需要) 1.程序邏輯 某些程序邏輯中,程序的邏輯已經足夠保證完整性,我會在存儲過程或包等地方做嚴謹的判斷; 2.性能問題 這是很多人不喜歡用的關鍵原因,比如一個業務流水表,頻繁插入數據,如果這個表身上有3外鍵,那么每次插入一條,就必須對這3個外鍵對應的3個表做相應的查找判斷有無對應數據,如果這3個表也很大,那就這3個表的判斷時間就很常,雖然外鍵指向的關聯表的字段肯定是索引,但是我覺得很多時候,這樣的判斷本來就在程序里控制好了,通過外鍵再判斷一次,就是降低性能;而且其實有的地方判不判斷也無所謂的,但是用了外鍵,就必須化時間去判斷,無論Oracle內部多么優化外鍵對于數據的檢索速度,它總是一個不小的消耗; 3.維護麻煩很多公司的軟件都是定制的,這種定制的東西,隨意性相對較大,項目開發實施過程中,需要經常對表修修補補;還有就是業務邏輯有bug或者其他情況,需要經常手工維護數據,有錯綜復雜的外鍵關聯著,很是麻煩; 4.外鍵定死了先后生成關系 外鍵定死了兩個表之間數據的先后生成關系,最常見的是單據主從表,有的時候,在生成單據的時候,是先生成明細,再生成主表;如果釘死了外鍵,這個就沒法實現; PS: 當然有些關鍵的業務,確實需要外鍵;


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 九江县| 旬邑县| 汉寿县| 衡山县| 拜泉县| 卓资县| 长治县| 临江市| 通许县| 兴安盟| 年辖:市辖区| 嘉兴市| 克东县| 九江市| 遂溪县| 天峻县| 江源县| 时尚| 富锦市| 连江县| 高清| 新兴县| 武鸣县| 乌鲁木齐县| 阿拉善右旗| 漳州市| 工布江达县| 民勤县| 靖西县| 通化市| 叙永县| 花莲县| 鄂伦春自治旗| 日土县| 房产| 江阴市| 温宿县| 太和县| 新乐市| 永和县| 青河县|