这更像是一个正确性问题。假设我的数据库中有一个包含主键列的表。在我的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