版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
學(xué)習(xí)作業(yè)3:?jiǎn)栴}1:你覺得外鍵有哪些適用情況?哪些不適用情況?問題2:本次實(shí)戰(zhàn)案例,由你來架構(gòu),你覺得有必要建立外鍵嗎?說明你的理由?==========================================================================知識(shí)點(diǎn):1、建立外鍵的寫法讓我們通過一個(gè)例子來解釋外鍵。請(qǐng)看下面兩個(gè)表:"Persons"表:Id_PLastNameFirstNameAddressCity1AdamsJohnOxfordStreetLondon2BushGeorgeFifthAvenueNewYork3CarterThomasChanganStreetBeijing"Orders"表:Id_OOrderNoId_P1778953244678332245614245621請(qǐng)注意,"Orders"中的"Id_P"列指向"Persons"表中的"Id_P"列。"Persons"表中的"Id_P"列是主鍵。"Orders"表中的"Id_P"列是外鍵。FOREIGNKEY約束用于預(yù)防破壞表之間連接的動(dòng)作。FOREIGNKEY約束也能防止非法數(shù)據(jù)插入外鍵列,因?yàn)樗仨毷撬赶虻哪莻€(gè)表中的值之一。在"Orders"表,為"Id_P"列創(chuàng)建FOREIGNKEY:CREATETABLEOrders(O_IdintNOTNULLPRIMARYKEY,OrderNointNOTNULL,Id_PintFOREIGNKEYREFERENCESPersons(Id_P))如果需要命名FOREIGNKEY約束,以及為多個(gè)列定義FOREIGNKEY約束,請(qǐng)使用下面的SQL語(yǔ)法:CREATETABLEOrders(O_IdintNOTNULL,OrderNointNOTNULL,Id_Pint,PRIMARYKEY(O_Id),CONSTRAINTfk_PerOrdersFOREIGNKEY(Id_P)REFERENCESPersons(Id_P))如果在"Orders"表已存在的情況下,為"Id_P"列創(chuàng)建FOREIGNKEY約束,請(qǐng)使用下面的SQL:ALTERTABLEOrdersADDFOREIGNKEY(Id_P)REFERENCESPersons(Id_P)如果需要命名FOREIGNKEY約束,以及為多個(gè)列定義FOREIGNKEY約束,請(qǐng)使用下面的SQL語(yǔ)法:ALTERTABLEOrdersADDCONSTRAINTfk_PerOrdersFOREIGNKEY(Id_P)REFERENCESPersons(Id_P)撤銷FOREIGNKEY約束如需撤銷FOREIGNKEY約束,請(qǐng)使用下面的SQL:ALTERTABLEOrdersDROPCONSTRAINTfk_PerOrders下面是一個(gè)例子:CREATETABLEa( IDvarchar(36)NOTNULLPRIMARYKEY)CREATETABLEb( IDvarchar(36)NOTNULLPRIMARYKEY)CREATETABLEa_b( IDvarchar(36)NOTNULLPRIMARYKEY, aIDvarchar(36), bIDvarchar(36), FOREIGNKEY(aID)REFERENCESa(ID), foreignkey(bID)referencesb(ID) ONDELETENOACTION ONUPDATENOACTION /*還可接CASCADE,SETNULL,SETDEFAULT*/)NOACTION:表示不執(zhí)行任何操作,當(dāng)刪除主鍵表中數(shù)據(jù)時(shí),如果外鍵表中有相應(yīng)的數(shù)據(jù),則主鍵表中的刪除操作失敗,該選項(xiàng)為默認(rèn)選項(xiàng)。CASCADE:表示級(jí)聯(lián)操作,當(dāng)刪除主鍵表中數(shù)據(jù)時(shí),外鍵表中相應(yīng)的數(shù)據(jù)會(huì)被自動(dòng)刪除SETNULL:執(zhí)行級(jí)聯(lián)操作,并且將外鍵表中的所有數(shù)據(jù)都設(shè)置為空值。SETDEFAULT:與SETNULL類似,外芻表中數(shù)據(jù)都設(shè)置為默認(rèn)值。======================================================================================2、是否有必要使用外鍵?為什么不用外鍵?一、正方觀點(diǎn)(需要使用外鍵)理由1:數(shù)據(jù)完整性:由數(shù)據(jù)庫(kù)自身保證數(shù)據(jù)一致性,完整性,更加可靠。如果只靠程序來控制,因?yàn)槌绦蚝茈y100%保證數(shù)據(jù)的完整性,而用外鍵即使在數(shù)據(jù)庫(kù)服務(wù)器當(dāng)機(jī)或者出現(xiàn)其他問題的時(shí)候,也能夠最大限度的保證數(shù)據(jù)的一致性和完整性。舉例:數(shù)據(jù)庫(kù)和前端應(yīng)用是一對(duì)多的關(guān)系,假設(shè)現(xiàn)在開發(fā)了A應(yīng)用,A應(yīng)用的程序代碼會(huì)維護(hù)他那部分?jǐn)?shù)據(jù)的完整性。然后,過了一段時(shí)間,系統(tǒng)決定新增功能,增加了B應(yīng)用,B應(yīng)用的開發(fā)有可能會(huì)影響到A應(yīng)用的數(shù)據(jù),或者影響A應(yīng)用的數(shù)據(jù)表結(jié)構(gòu)。很遺憾的是,A和B兩個(gè)應(yīng)用是不同開發(fā)團(tuán)隊(duì)來做的。他們?nèi)绾螀f(xié)調(diào)保證數(shù)據(jù)的完整性,而且一年以后如果又增加了C應(yīng)用呢?理由2:ER圖可靠性:數(shù)據(jù)庫(kù)ER圖(數(shù)據(jù)庫(kù)實(shí)體關(guān)系圖):有主外鍵的數(shù)據(jù)庫(kù)設(shè)計(jì)可以增加ER圖的可讀性,這點(diǎn)在數(shù)據(jù)庫(kù)設(shè)計(jì)時(shí)非常重要。理由3:使設(shè)計(jì)更全面:外鍵在一定程度上說明的業(yè)務(wù)邏輯,會(huì)使設(shè)計(jì)周到具體全面。理由4:級(jí)聯(lián)性能未必最低:除非能證明觸發(fā)器的性能和可維護(hù)性比外鍵更優(yōu),否則憑什么一定要否定外鍵呢?二、反方觀點(diǎn)(不需要使用外鍵)理由1:程序邏輯:某些程序邏輯中,程序的邏輯已經(jīng)足夠保證完整性,我會(huì)在存儲(chǔ)過程或包等地方做嚴(yán)謹(jǐn)?shù)呐袛啵焕碛?:性能問題:這是很多人不喜歡用的關(guān)鍵原因,比如一個(gè)業(yè)務(wù)流水表,頻繁插入數(shù)據(jù),如果這個(gè)表身上有3外鍵,那么每次插入一條,就必須對(duì)這3個(gè)外鍵對(duì)應(yīng)的3個(gè)表做相應(yīng)的查找判斷有無對(duì)應(yīng)數(shù)據(jù),如果這3個(gè)表也很大,那就這3個(gè)表的判斷時(shí)間就很常,雖然外鍵指向的關(guān)聯(lián)表的字段肯定是索引,但是我覺得很多時(shí)候,這樣的判斷本來就在程序里控制好了,通過外鍵再判斷一次,就是降低性能;而且其實(shí)有的地方判不判斷也無所謂的,但是用了外鍵,就必須化時(shí)間去判斷,無論oracle內(nèi)部多么優(yōu)化外鍵對(duì)于數(shù)據(jù)的檢索速度,它總是一個(gè)不小的消耗;理由3:維護(hù)麻煩:很多公司的軟件都是定制的,這種定制的東西,隨意性相對(duì)較大,項(xiàng)目開發(fā)實(shí)施過程中,需要經(jīng)常對(duì)表修修補(bǔ)補(bǔ);還有就是業(yè)務(wù)邏輯有bug或者其他情況,需要經(jīng)常手工維護(hù)數(shù)據(jù),有錯(cuò)綜復(fù)雜的外鍵關(guān)聯(lián)著,很是麻煩;理由4:外鍵定死了先后生成關(guān)系:外鍵定死了兩個(gè)表之間數(shù)據(jù)的先后生成關(guān)系,最常見的是單據(jù)主從表,有的時(shí)候,在生成單據(jù)的時(shí)候,是先生成明細(xì),再生成主表;如果釘死了外鍵,這個(gè)就沒法實(shí)現(xiàn);理由5:當(dāng)然有些關(guān)鍵的業(yè)務(wù),確實(shí)需要外鍵;============================================================================================3、大家設(shè)計(jì)數(shù)據(jù)庫(kù)時(shí)使用外鍵嗎?觀點(diǎn)分享1:互聯(lián)網(wǎng)行業(yè)不推薦使用外鍵、傳統(tǒng)行業(yè)推薦可以使用外鍵、外鍵有性能問題外鍵是否采用看業(yè)務(wù)應(yīng)用場(chǎng)景,以及開發(fā)成本的,大致列下什么時(shí)候適合,什么時(shí)候不適合使用:細(xì)分1:互聯(lián)網(wǎng)行業(yè)應(yīng)用不推薦使用外鍵:用戶量大,并發(fā)度高,為此數(shù)據(jù)庫(kù)服務(wù)器很容易成為性能瓶頸,尤其受IO能力限制,且不能輕易地水平擴(kuò)展;若是把數(shù)據(jù)一致性的控制放到事務(wù)中,也即讓應(yīng)用服務(wù)器承擔(dān)此部分的壓力,而引用服務(wù)器一般都是可以做到輕松地水平的伸縮;細(xì)分2:傳統(tǒng)行業(yè):1>.軟件應(yīng)用的人數(shù)有限,換句話說是可控的;2>.數(shù)據(jù)庫(kù)服務(wù)器的數(shù)據(jù)量也一般不會(huì)超大,且活躍數(shù)據(jù)有限;綜合2點(diǎn),在傳統(tǒng)行業(yè),數(shù)據(jù)庫(kù)服務(wù)器的性能不是問題,所以不用過多考慮性能的問題;另外,使用外鍵可以降低開發(fā)成本,借助數(shù)據(jù)庫(kù)產(chǎn)品自身的觸發(fā)器可以實(shí)現(xiàn)表與關(guān)聯(lián)表之間的數(shù)據(jù)一致性和更新;最后一點(diǎn),使用外鍵的方式,還可以做到開發(fā)人員和數(shù)據(jù)庫(kù)設(shè)計(jì)人員的分工,可以為程序員承擔(dān)更多的工作量;細(xì)分3:為何說外鍵有性能問題:1.數(shù)據(jù)庫(kù)需要維護(hù)外鍵的內(nèi)部管理;2.外鍵等于把數(shù)據(jù)的一致性事務(wù)實(shí)現(xiàn),全部交給數(shù)據(jù)庫(kù)服務(wù)器完成;3.有了外鍵,當(dāng)做一些涉及外鍵字段的增,刪,更新操作之后,需要觸發(fā)相關(guān)操作去檢查,而不得不消耗資源;4.外鍵還會(huì)因?yàn)樾枰?qǐng)求對(duì)其他表內(nèi)部加鎖而容易出現(xiàn)死鎖情況;觀點(diǎn)分享2:項(xiàng)目初期設(shè)計(jì)使用外鍵、后期業(yè)務(wù)運(yùn)行去除外鍵新手一枚,自己搞外包成長(zhǎng)起來的,來說說看法,務(wù)噴。之前搞一個(gè)外包是開發(fā)OA系統(tǒng)的,在系統(tǒng)設(shè)計(jì)之初,數(shù)據(jù)庫(kù)的設(shè)計(jì)很規(guī)范的,大量使用外鍵,約束,符合范式要求。因?yàn)檫@樣,我可以迅速的建立一個(gè)可靠性非常高的數(shù)據(jù)庫(kù)結(jié)構(gòu),而不用讓應(yīng)用程序?qū)尤プ鲞^多的檢查,誰(shuí)都想寫最少的代碼,完成更多的功能。所以,項(xiàng)目初始階段,使用外鍵是必須的,而且是強(qiáng)烈推薦使用外鍵,數(shù)據(jù)庫(kù)自帶的約束,這樣可以讓你的業(yè)務(wù)架構(gòu)迅速成型。等項(xiàng)目的數(shù)據(jù)量越做越大,用戶數(shù)越來越多的時(shí)候,那個(gè)時(shí)候,已經(jīng)可以充分證明你的業(yè)務(wù)架構(gòu)是正確的,這個(gè)時(shí)候你要是有性能瓶頸上的問題,完全可以把外鍵去除,轉(zhuǎn)移到應(yīng)用層實(shí)現(xiàn)??偨Y(jié):和我一樣是新手的同學(xué),不要被老司機(jī)的結(jié)論所蒙騙,他們一般都只說結(jié)果,不講過程的。過程就是,設(shè)計(jì)業(yè)務(wù)架構(gòu),系統(tǒng)初始之初,規(guī)規(guī)矩矩的使用外鍵,符合范式,待業(yè)務(wù)發(fā)展,確定架構(gòu)本身沒有問題,一些約束漸漸的平移到應(yīng)用層實(shí)現(xiàn)。結(jié)果就是,每個(gè)階段都有不同的做法。根據(jù)實(shí)際情況去設(shè)計(jì)實(shí)現(xiàn)。觀點(diǎn)分享3:架構(gòu)事務(wù)管理能力強(qiáng)、可以替代掉外鍵、應(yīng)用服務(wù)器比數(shù)據(jù)庫(kù)服務(wù)器便宜更容易擴(kuò)展因?yàn)楹芏啻鸢笇?duì)但是不精到,我再回答一個(gè)。這實(shí)際上不是個(gè)數(shù)據(jù)庫(kù)問題,而是個(gè)架構(gòu)問題。使用外鍵與否,看你使用的框架是否有足夠的事務(wù)管理能力。(其實(shí)不僅限于外鍵,還有一切可被替代的db高級(jí)特性)如果足夠,那么應(yīng)該盡量避免。理由很簡(jiǎn)單:appserver比dbserver便宜,而且拓展容易。觀點(diǎn)分享4:數(shù)據(jù)量大不適用外鍵、安全性可靠性要求高適用外鍵、高并發(fā)不適用外鍵我想,這取決于數(shù)據(jù)庫(kù)的用途、規(guī)模、架構(gòu),有外鍵,可以提高魯棒性、健壯性,但是約束檢驗(yàn)顯然會(huì)拖慢速度。規(guī)模上說,數(shù)據(jù)量大的不適合用外鍵,小的可以用;用途上安全性、可靠性很重要的就要用外鍵,否則可以不用。具體情況具體解決了,因?yàn)橐灿忻艿臅r(shí)候,數(shù)據(jù)量極大,但是又要求高可靠,例如銀行金融、芯片生產(chǎn)等,仍然需要外鍵的存在??梢酝ㄟ^SAN+RAID等硬件提升解決矛盾。要求高并發(fā)的情況下,并不適合外鍵,有的連關(guān)系數(shù)據(jù)庫(kù)都不用了,甚至數(shù)據(jù)庫(kù)都不用了。這類問題真沒有絕對(duì)的答案,什么情況下該怎樣做,只能是多想,多做了,錯(cuò)的多了,就懂了。觀點(diǎn)分享5:除非沒有其他辦法提升性能,建議嚴(yán)格使用外鍵除非為了提高性能沒有任何其他辦法可以用了,否則不要取消外鍵。數(shù)據(jù)被錯(cuò)誤覆寫、錯(cuò)誤數(shù)據(jù)進(jìn)庫(kù)(會(huì)引發(fā)不可預(yù)期的連鎖反應(yīng))往往是比程序錯(cuò)誤更難修復(fù)的錯(cuò)誤,有時(shí)甚至不能修復(fù)我通常不僅加足外鍵,還狂加約束,一直被稱為“約束狂人”。我寫的代碼在所有非性能關(guān)鍵路徑上全是各種檢查,Release版也保留。優(yōu)化的話則從頂層入手、從整體入手。我做過這么多項(xiàng)目從來沒有遇到什么問題。觀點(diǎn)分享6:性能遇到瓶頸時(shí)再去除外鍵、數(shù)據(jù)量用戶量大可以不用外鍵設(shè)計(jì)數(shù)據(jù)庫(kù)時(shí)使用外鍵關(guān)聯(lián),甚至等到系統(tǒng)部署發(fā)布,在生產(chǎn)環(huán)境上仍然使用外鍵。。。畢竟,等到你發(fā)現(xiàn)用戶量增長(zhǎng),數(shù)據(jù)庫(kù)寫入成為瓶頸的時(shí)候,完全可以刪掉外鍵關(guān)聯(lián)嘛。。。而且,因?yàn)橹暗耐怄I約束,也能盡早的發(fā)現(xiàn)應(yīng)用系統(tǒng)的Bug,從而在之后刪掉外鍵關(guān)聯(lián)的時(shí)候不用擔(dān)心應(yīng)用系統(tǒng)哪里做得不到位。當(dāng)然,如果用戶量增長(zhǎng)過快,或者是在一個(gè)用戶量本身就很大的舊系統(tǒng)上新增業(yè)務(wù)功能,那就只能不用外鍵,老老實(shí)實(shí)審查代碼了。觀點(diǎn)分享7:互聯(lián)網(wǎng)應(yīng)用中,有更好的選擇,外鍵無用外鍵在早期企業(yè)系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì)里面比較多吧,本意是好了,幫程序員節(jié)省delete,update操作,實(shí)際上增加了潛規(guī)則,也增加了軟件復(fù)雜度?;ヂ?lián)網(wǎng)應(yīng)用中,一般流量比較大,數(shù)據(jù)庫(kù)當(dāng)memecache用,大表+冗余字段,索引還建在外部用sphinx之類,基本上沒有表和表的關(guān)聯(lián)關(guān)系,外鍵無用觀點(diǎn)分享8:在應(yīng)用層做防錯(cuò)檢查、數(shù)據(jù)庫(kù)不設(shè)置外鍵做外鍵主要目的就是鏈接各表間的關(guān)系,防止直接操作導(dǎo)致數(shù)據(jù)紊亂,或者垃圾信息的產(chǎn)生。但目前各種后端框架發(fā)展到目前這種地步,在模型層已經(jīng)可以處理好這些邏輯了,而模型層的意義本來就是避免對(duì)數(shù)據(jù)庫(kù)進(jìn)行直接操作。我目前在設(shè)計(jì)數(shù)據(jù)庫(kù)的時(shí)候基本都不設(shè)置外鍵,而是在模型層刪除處做檢查處理,邏輯特別清晰。觀點(diǎn)分享9:小應(yīng)用沒必要用外鍵、大數(shù)據(jù)備份和清理用外鍵、邏輯要求精細(xì)用外鍵外鍵好比保險(xiǎn)繩,如果代碼邏輯和數(shù)據(jù)庫(kù)備份沒有問題,設(shè)置不設(shè)置都一樣。外鍵在數(shù)據(jù)庫(kù)表中的存在,是為了約束數(shù)據(jù)庫(kù)的一致性。不過我認(rèn)為實(shí)際設(shè)計(jì)開發(fā)、運(yùn)營(yíng)維護(hù)過程中,應(yīng)該沒必要使用。外鍵更多的需要作用與海量數(shù)據(jù)庫(kù)中,幾百萬幾千萬的數(shù)據(jù)備份和清理,需要外鍵。數(shù)據(jù)更清晰和整齊嘛,小應(yīng)用和數(shù)據(jù)庫(kù),沒必要使用吧。系統(tǒng)復(fù)雜,并出現(xiàn)海量數(shù)據(jù)的時(shí)候,那么,業(yè)務(wù)邏輯需要極為精細(xì)的分解為:數(shù)據(jù)邏輯和程序邏輯,并保持精細(xì)一致對(duì)應(yīng),這個(gè)時(shí)候,數(shù)據(jù)庫(kù)管理員設(shè)置外鍵,保證數(shù)據(jù)庫(kù)數(shù)據(jù)干凈有效,這是ok的。簡(jiǎn)單就一句話,小系統(tǒng),用戶量或者數(shù)量不超過百萬級(jí)別的,都沒有必要介意是否使用外鍵。不用就好了。觀點(diǎn)分享10:不經(jīng)常改的數(shù)據(jù)用外鍵、經(jīng)常更改的數(shù)據(jù)不用外鍵建議:一些常量的事情,不經(jīng)常改的常數(shù),請(qǐng)使用外鍵,來記錄數(shù)據(jù)關(guān)系.而那些經(jīng)常更改的,請(qǐng)使用更高層的邏輯來記錄數(shù)據(jù)關(guān)系.觀點(diǎn)分享11:項(xiàng)目初期適用外鍵、互聯(lián)網(wǎng)應(yīng)用不適用外鍵、讀取數(shù)據(jù)和外鍵無關(guān)外鍵提供了一個(gè)數(shù)據(jù)完整性的工具,開發(fā)者可以以更輕便的方式解決問題。特別在初期階段,項(xiàng)目架構(gòu)以及資源成本的限制。外鍵可以大大提高開發(fā)效率及容錯(cuò)性?;ヂ?lián)網(wǎng)應(yīng)用因?yàn)閿?shù)據(jù)量大及集群,導(dǎo)致外鍵在某些場(chǎng)景下帶來不便。因此才會(huì)去選擇性
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 花主題活動(dòng)策劃方案(3篇)
- 自制活動(dòng)小屋方案策劃(3篇)
- 磚墊層施工方案(3篇)
- 大白-涂料施工方案(3篇)
- 地面吸聲施工方案(3篇)
- 大型干渠施工方案(3篇)
- 放學(xué)音樂活動(dòng)方案策劃(3篇)
- 企業(yè)國(guó)際化運(yùn)營(yíng)與管理規(guī)范(標(biāo)準(zhǔn)版)
- 短視頻直播策劃方案
- 2025年高職云計(jì)算技術(shù)與應(yīng)用(云計(jì)算應(yīng)用)試題及答案
- 設(shè)計(jì)公司報(bào)賬管理辦法
- DB51∕T 3045-2023 四川省社會(huì)保險(xiǎn)基本公共服務(wù)規(guī)范
- 畢業(yè)設(shè)計(jì)(論文)-自動(dòng)展開曬衣架設(shè)計(jì)
- 智能化系統(tǒng)在鐵路裝備檢修中的應(yīng)用-洞察闡釋
- TCPQSXF006-2023消防水帶產(chǎn)品維護(hù)更換及售后服務(wù)
- 2025四川眉山市國(guó)有資本投資運(yùn)營(yíng)集團(tuán)有限公司招聘50人筆試參考題庫(kù)附帶答案詳解
- 邊坡噴錨施工方案
- YS/T 3045-2022埋管滴淋堆浸提金技術(shù)規(guī)范
- 項(xiàng)目進(jìn)度跟進(jìn)及完成情況匯報(bào)總結(jié)報(bào)告
- 峨眉山城市介紹旅游宣傳課件
- 浙江省溫州市樂清市2023-2024學(xué)年五年級(jí)上學(xué)期期末語(yǔ)文試題
評(píng)論
0/150
提交評(píng)論