【发布时间】:2010-11-03 09:15:40
【问题描述】:
这更像是一个正确性问题。假设我的数据库中有一个带有主键列的表。在我的 DAO 代码中,我有一个名为 insertRow(string key) 的函数,如果表中不存在该键,该函数将返回 true 并使用该键插入一个新行。否则,如果已经存在具有该键的行,则返回 false。让 insertRow 首先检查密钥的存在是更好还是更糟,还是继续进行插入并捕获重复的密钥错误?还是节省单个 select 语句太微不足道而无需担心?
所以在 sudo 代码中:
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 的《企业应用程序架构模式》一书,我敢肯定他在他的“身份字段”模式中提供了一些很好的指导。当然,在没有某种锁定的情况下检查最后一个键是很危险的。
-
看起来您可以在 Google 图书上查看它-books.google.co.uk/…