亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1864 | 回復(fù): 0
打印 上一主題 下一主題

你們數(shù)據(jù)庫使用外鍵嗎 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2011-03-07 07:42 |只看該作者 |倒序瀏覽
轉(zhuǎn)自 http://www.javaeye.com/topic/920511

今天看天乙社區(qū)的程序,發(fā)現(xiàn)一個外鍵都沒有啊,太狠了。上網(wǎng)看了一些資料,稍微整理了一下。

這個帖子很牛:

http://www.itpub.net/viewthread. ... p;extra=&page=1



我的觀點是,外鍵在初始階段能加的都加上,只有迫不得已的時候才disable或drop掉。遇到性能瓶頸的時候,盡量采用其它方式調(diào)優(yōu),而不要輕易犧牲掉外鍵。有外鍵約束的時候,寫程序的確會有約束,但從直覺上說這種約束一定程度上揭示了設(shè)計或?qū)崿F(xiàn)上不合理的地方。帶著外鍵寫出來的應(yīng)用更傾向于嚴謹。產(chǎn)品上線之前如果確實需要通過犧牲外鍵達到性能上的優(yōu)化,再撿相對不重要的外鍵廢棄掉,同時要把這個document下來,下次遇到數(shù)據(jù)不一致問題的時候,是個線索。兩點說明:1. 我們在做的一個項目確實是小項目。  2. 我得承認我最近三年開發(fā)都不用關(guān)系型數(shù)據(jù)庫,貌似 no sql那么nb的key-value pair存數(shù)據(jù),其實這三年在持久層上很多糾結(jié)。如果我說的不對,請指正!



下面引用一些有見地的想法:

× 支持外鍵的:

1. 你的程序再嚴謹也有可能出現(xiàn)BUG;你自己判斷不如交給數(shù)據(jù)庫判斷,它做得又快又好。
    大多數(shù)人的程序沒有考慮并發(fā)問題。一旦考慮了就得手工加鎖,效率很低。
    數(shù)據(jù)可能繞過你的應(yīng)用程序進入數(shù)據(jù)庫。
2. 性能問題:難道你自己做就沒有開銷?
    一個外鍵判斷分攤到事務(wù)級別,開銷可以忽略,用戶完全沒有察覺。
    如果是批量導(dǎo)入數(shù)據(jù),可以先暫時屏蔽外鍵,事后用NOVALIDATE選項快速恢復(fù),前提是你的數(shù)據(jù)是干凈的。

  

也有人提到了如果100張表可能需要建立300個約束,導(dǎo)致性能太差。
我要說的仍然是,是否這300個外鍵約束都是業(yè)務(wù)必須的,如果是,沒有辦法這就是必須要加的,如果不是,那么大可不必在所有的地方都增加外鍵。
如果在程序中僅對其中的5、6張表的10來個外鍵約束進行判斷,然后和數(shù)據(jù)庫中的300個外鍵去比較,并評價Oracle的外鍵性能太差,恐怕是有失公允的。

  

× 反對外鍵的:

的確外鍵在大系統(tǒng)中用的很少,在開發(fā)初級,設(shè)計數(shù)據(jù)庫的時候一般會加入外鍵,以保證系統(tǒng)設(shè)計的完整性和業(yè)務(wù)需求的完整性,也便于開發(fā)人員了解業(yè)務(wù)規(guī)則,在程序中加以控制,很多大系統(tǒng)在系統(tǒng)穩(wěn)定后,會逐步將外鍵去掉,以保證性能,將太多的功能強加于數(shù)據(jù)庫,雖然說數(shù)據(jù)庫很強大,但是畢竟很多人不信任數(shù)據(jù)庫的能強大到什么都能干的地步。所以在一個大系統(tǒng)中外鍵見的少也不足為奇,小系統(tǒng)就無所謂了,用不用外鍵取決于設(shè)計人員,這樣的系統(tǒng)也隨處可見。





另引用一篇:

引自http://blog.csdn.net/neusoft_lkz/archive/2009/07/21/4366668.aspx

數(shù)據(jù)庫設(shè)計是否需要外鍵。這里有兩個問題:一個是如何保證數(shù)據(jù)庫數(shù)據(jù)的完整性和一致性;二是第一條對性能的影響。
正方觀點:
1,由數(shù)據(jù)庫自身保證數(shù)據(jù)一致性,完整性,更可靠,因為程序很難100%保證數(shù)據(jù)的完整性,而用外鍵即使在數(shù)據(jù)庫服務(wù)器當機或者出現(xiàn)其他問題的時候,也能夠最大限度的保證數(shù)據(jù)的一致性和完整性。
eg:數(shù)據(jù)庫和應(yīng)用是一對多的關(guān)系,A應(yīng)用會維護他那部分數(shù)據(jù)的完整性,系統(tǒng)一變大時,增加了B應(yīng)用,A和B兩個應(yīng)用也許是不同的開發(fā)團隊來做的。他們?nèi)绾螀f(xié)調(diào)保證數(shù)據(jù)的完整性,而且一年以后如果又增加了C應(yīng)用呢?
2,有主外鍵的數(shù)據(jù)庫設(shè)計可以增加ER圖的可讀性,這點在數(shù)據(jù)庫設(shè)計時非常重要。
3,外鍵在一定程度上說明的業(yè)務(wù)邏輯,會使設(shè)計周到具體全面。
反方觀點:
1,可以用觸發(fā)器或應(yīng)用程序保證數(shù)據(jù)的完整性
2,過分強調(diào)或者說使用主鍵/外鍵會平添開發(fā)難度,導(dǎo)致表過多等問題
3,不用外鍵時數(shù)據(jù)管理簡單,操作方便,性能高(導(dǎo)入導(dǎo)出等操作,在insert,   update,   delete   數(shù)據(jù)的時候更快)
eg:在海量的數(shù)據(jù)庫中想都不要去想外鍵,試想,一個程序每天要insert數(shù)百萬條記錄,當存在外鍵約束的時候,每次要去掃描此記錄是否合格,一般還不止一個字段有外鍵,這樣掃描的數(shù)量是成級數(shù)的增長!我的一個程序入庫在3個小時做完,如果加上外鍵,需要28個小時!  

結(jié)論:
1,在大型系統(tǒng)中(性能要求不高,安全要求高),使用外鍵;在大型系統(tǒng)中(性能要求高,安全自己控制),不用外鍵;小系統(tǒng)隨便,最好用外鍵。
2,用外鍵要適當,不能過分追求
3,不用外鍵而用程序控制數(shù)據(jù)一致性和完整性時,應(yīng)該寫一層來保證,然后個個應(yīng)用通過這個層來訪問數(shù)據(jù)庫。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP