這更像是一個正確性問題。假設我的數據庫中有一個包含主鍵列的表。在我的DAO代碼中,我有一個名爲insertRow(string key)的函數,如果表中不存在該鍵並且用鍵插入一個新行,它將返回true。否則,如果該行已經存在,則返回false。 insertRow首先檢查鍵的存在或者繼續執行插入操作並捕獲重複的鍵錯誤,是否更好/更糟糕?或者是在一個單一的選擇語句上存儲過於簡單的優化,甚至會擔心擔心?測試數據庫中重複密鑰的最佳方法
所以在須藤代碼:
boolean insertRow(String key){
//potentially a select + insert
if(select count(*) from mytable where key = "somekey" == 0){
insert into mytable values("somekey")
return true;
}
return false;
}
或
boolean insertRow(String key){
try{
//always just 1 insert
insert into mytable values("somekey")
return true;
} catch (DuplicateKeyException ex){}
return false;
}
如果有企業應用架構Martin Fowler的書模式我敢肯定,他給出了這樣一些很好的指導在他的「標識字段」的格局。當然,在沒有某種鎖定的情況下檢查最後一把鑰匙會很危險。 – RichardOD 2009-06-16 15:32:43
看起來您可以在Google書籍上查看 - http://books.google.co.uk/books?id=FyWZt5DdvFkC&pg=PT243&lpg=PT243&dq=%22identity+field%22+Fowler+implementation&source=bl&ots=eEAuZzZtdA&sig=f3jc- rc3CsY2ZRQ9HzgkiMVzZdc&HL = EN&EI = nrs3SvvsJZTQjAfOm_GhDQ&SA = X&OI = book_result和CT =導致與resnum = 4#PPT243,M1 – RichardOD 2009-06-16 15:35:30