OID是什么意思
来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/11/09 10:00:41
OID是什么意思
什么是OID
为了在系统中能够找到所需对象,我们需要为每一个对象分配一个唯一的表示号.在关系数据库中我们称之为关键字,而在对象术语中,则叫做对象标识(Object identifier-OID).
通常OID在内部都使用一个或多个大整数表示,而在应用程序中则提供一个完整的类为其他类提供获取、操作.
OID(Object ID)应当没有任何业务相关含义
一个非常关键的问题是OID绝对不应当具有任何业务含义.因为任何有业务含义的列都有改变的可能性,而计算机社团多年来从关系数据库学到的最重要的一个事实之一就是:不要给你的关键字任何意义.如果你的用户决定改变业务含义,也许他们想要增加几个数字或把数字变为字母数字,那么你需要在任何用到这个关键字的地方进行改变.一个表中的主关键字内的任何东西都有可能被其他表作为外键.就算是一个简单的改变,譬如在你的客户号码马上增加一个数字,可能会造成极大的维护上的开销.在关系数据库中,这种OID策略被称之为代理关键字.
OID的唯一性
一个 OID必须在一个类层次中保持唯一,理想上应该在所有对象上都唯一.
在分配对象OID时需要考虑两个问题:
l OID唯一性的层次
l 如何计算OID
我们先来看看第一个问题,对很多面向对象的新手来说,他们对这个问题的认识往往不够深刻.这里涉及到三个层次上的唯一性:一个类内的唯一性,一个类层次之间的唯一性,以及所有类之间的唯一性.
譬如,给一个客户对象的OID是只对所有客户实例唯一,还是对所有的人员还是所有的对象.一个具有值76766的OID是可以分配给一个客户对象,一个员工对象,一个订单对象呢?还是只能分配给一个客户而不是员工(因为客户和员工位于同一个类层次之内),还是除了客户外什么都不能分配.这里问题与多态相关:一个客户以后可能成为员工,但一个订单对象则不会如此.为了避免在一个对象改变类型的时候需要重新分配OID,你至少应当保证在类层次级别上的唯一性.当然在所有对象上保持唯一可以完全避免类似问题,尽管在实现上可能会有些困难.
为了在系统中能够找到所需对象,我们需要为每一个对象分配一个唯一的表示号.在关系数据库中我们称之为关键字,而在对象术语中,则叫做对象标识(Object identifier-OID).
通常OID在内部都使用一个或多个大整数表示,而在应用程序中则提供一个完整的类为其他类提供获取、操作.
OID(Object ID)应当没有任何业务相关含义
一个非常关键的问题是OID绝对不应当具有任何业务含义.因为任何有业务含义的列都有改变的可能性,而计算机社团多年来从关系数据库学到的最重要的一个事实之一就是:不要给你的关键字任何意义.如果你的用户决定改变业务含义,也许他们想要增加几个数字或把数字变为字母数字,那么你需要在任何用到这个关键字的地方进行改变.一个表中的主关键字内的任何东西都有可能被其他表作为外键.就算是一个简单的改变,譬如在你的客户号码马上增加一个数字,可能会造成极大的维护上的开销.在关系数据库中,这种OID策略被称之为代理关键字.
OID的唯一性
一个 OID必须在一个类层次中保持唯一,理想上应该在所有对象上都唯一.
在分配对象OID时需要考虑两个问题:
l OID唯一性的层次
l 如何计算OID
我们先来看看第一个问题,对很多面向对象的新手来说,他们对这个问题的认识往往不够深刻.这里涉及到三个层次上的唯一性:一个类内的唯一性,一个类层次之间的唯一性,以及所有类之间的唯一性.
譬如,给一个客户对象的OID是只对所有客户实例唯一,还是对所有的人员还是所有的对象.一个具有值76766的OID是可以分配给一个客户对象,一个员工对象,一个订单对象呢?还是只能分配给一个客户而不是员工(因为客户和员工位于同一个类层次之内),还是除了客户外什么都不能分配.这里问题与多态相关:一个客户以后可能成为员工,但一个订单对象则不会如此.为了避免在一个对象改变类型的时候需要重新分配OID,你至少应当保证在类层次级别上的唯一性.当然在所有对象上保持唯一可以完全避免类似问题,尽管在实现上可能会有些困难.