<FROM Java Database Best Practise>
作为PK的栏位不宜带有实际意义,建议使用整数作为PK。一方面是为系统可扩展性考虑,因为若PK栏位带有意义,则作为PK的栏位有可能因系统逻辑变化而发生变化,从而给资料一致带来风险。另一方面也是为效能考虑,使用整数PK可进行快速检索,而涉及多个栏位则会在处理时占用较多资源。
建议自行实现产生整数ID的机制,而不要依赖于DB的Sequence。可有一table SEQUENCE,定义以下栏位
NAME //sequence 名称
SEED //sequence计数基数
SEQ //sequence计数值
产生sequence的类Sequencer
package ee.seq;
import java.util.*;

public class Sequencer ...{
private static final long MAX_KEYS = 1000000L;
private static final HashMap sequencers = new HashMap();
private String name = null;
private long seed = -1L;
private long sequence = 0L;

public static final Sequencer getInstance(String name)...{
Sequencer seq = null;
synchronized(sequencers)...{
if(sequencers.containsKey(name))...{
seq = (Sequencer)sequencers.get(name);
}
else...{
seq = new Sequencer(name);
sequencers.put(name, seq);
}
}
return seq;
}

private Sequencer(String seqName)...{
name = seqName;
}

public synchronized long next()...{
if(seed==-1 || sequence+1 >= MAX_KEYS)...{
reseed();
}
sequence++;
return (seed * MAX_KEYS + sequence);
}

private void reseed()...{
seed++;
}
}

本文讨论了在Java应用程序中使用数据库的最佳实践,特别是关于主键(PK)的设计原则。建议使用整数作为主键以提高系统的可扩展性和查询效率,并提供了一种自定义生成整数ID的方法,避免依赖数据库的Sequence。
1717

被折叠的 条评论
为什么被折叠?



