分类: Java
2009-04-14 10:21:46
一个非常关键的问题是IOD不应当包含任何业务含义。因为任何有业务含义的列都有改变的可能性,而计算机社团多年来从关系数据库学到的最重要的一个事实之一就是:不要给你的关键字任何意义。如果你的用户决定改变业务含义,也许他们想要增加几个数字或把数字变为字母数字,那么你需要在任何用到这个关键字的地方进行改变。一个表中的主关键字内的任何东西都有可能被其他表作为外键。就算是一个简单的改变,譬如在你的客户号码马上增加一个数字,可能会造成极大的维护上的开销。在关系数据库中,这种OID策略被称之为代理关键字。 |
一个OID必须在一个类层次上保持唯一,理想上是在所有对象上都唯一。 再分配OID是要注意两个问题: 1,OID唯一性的5层; 2,如何计算OID; 我们先来看看第一个问题,对许多新手来说,他们对这个问题的认识往往不够深刻。这里涉及到三个层次上的唯一性:一个类内的唯一性,类与类之间的唯一性,所有类之间的唯一性。 譬如:一个客户的OID是对所有客户实例唯一,还是对所有人员唯一,还是对所有对象唯一。一个具有值76766的OID是可以分配给一个客户对象,一个员工对象,一个订单对象呢?还是只能分配给一个客户而不是员工(因为客户和员工位于同一个类层次之内),还是除了客户外什么都不能分配。这里问题与多态相关:一个客户以后可能成为员工,但一个订单对象则不会如此。为了避免在一个对象改变类型的时候需要重新分配OID,你至少应当保证在类层次级别上的唯一性。当然在所有对象上保持唯一可以完全避免类似问题,尽管在实现上可能会有些困难。 |