企業級NTier體系結構解決方案討論(一)
我再舉一個數據完整性(Integerity)的問題。例如網上報帳的系統,它需要兩個相關的表,一個是帳務的記錄表
(loan_history),一個是帳務的清除表(loan_clear),每當在loan_clear表中增加一個記錄條的時候,必須在相應的
loan_history表中清除相應的loan記錄。那么我們將該過程寫實現在App Server端上怎么辦呢?有點難度,來兩個SQL語句
吧:
insert into loan_clear values(loan_id,*,*,*) (1)
(loan_history),一個是帳務的清除表(loan_clear),每當在loan_clear表中增加一個記錄條的時候,必須在相應的
loan_history表中清除相應的loan記錄。那么我們將該過程寫實現在App Server端上怎么辦呢?有點難度,來兩個SQL語句
吧:
insert into loan_clear values(loan_id,*,*,*) (1)
delete from
loan_history lh inner join loan_clear lc where lh.loan_id=lc.loan_id (2)
那么萬一在第一條語句執行完后,停電了怎么辦(買UPS吧)?萬一有人就執行第一條語句怎么辦?這些在app Server端令
人頭痛的問題放到database端就不成問題了,我可以用事務處理來解決:
begin transaction
insert into loan_clear values(loan_id,*,*,*)
delete from
loan_history lh inner join loan_clear lc where lh.loan_id=lc.loan_id
commit transaction
再將這個事務處理的過程寫成一個Procedure。或者做個觸發器(trigger)
Create Trigger fresh_loan on loan_clear
For insert
delete from
loan_history lh inner join loan_clear lc where lh.loan_id=lc.loan_id
好了,3H都討論到了,我這里討論的主要的是SQL Server系列,其實Oracle的體系結構(Frame)和解決的很多方案是和
SQL Server相同的。不過一個是用了Transaction SQL,一個是用了PL/SQL。當然性能是有區別的,當然價格也是有區別的
(得去找一個economical analysis engineering了)。希望我的這篇拙作能對各位開發者小有作用,不然就當笑談了吧。