技术文章和资源

技术文章(时间排序)

热门类别

Python PHP MySQL JDBC Linux

对象标识以及对象与文字

dbmsdatabasemysql

DBMS 支持面向对象的数据。它确保现实世界对象与其在数据库中的表示直接对应。这种对应关系确保对象保持其完整性和身份。它使识别和操作变得容易。对象数据管理系统 (ODMS) 为存储在数据库中的每个独立对象分配唯一标识。

此唯一标识通过系统生成的对象标识符 (OID) 实现。此 OID 用作系统分配给每个对象的独特值。它对外部用户不可见。但是,系统在内部使用它来确保每个对象的唯一标识,并建立和管理对象之间的引用。在需要时,系统将 OID 分配给适当类型的程序变量,以及涉及对象的操作。

不变性和唯一性

对象数据管理系统 (ODMS) 中对象标识符 (OID) 的主要要求是不变性。至关重要的是,分配给特定对象的 OID 值保持不变,从而确保对象在现实世界中的身份得以保留。ODMS 必须包含生成 OID 和强制其不变性的机制。最好每个 OID 都是唯一的并且只使用一次。即使对象从数据库中删除,其 OID 也不应该重新分配给另一个对象。

为了满足这些要求,OID 不应该依赖于对象的任何属性值。这是必要的,因为属性值可能会随着时间的推移而改变或更正。在关系模型中,每个关系都需要主键。如果主键的值发生更改,元组将考虑新的身份。在不同的关系中,现实世界对象的关键属性可能具有不同的名称。这会给确定这些键是否代表同一个现实世界对象带来挑战。例如,对象标识符可能在一个关系中表示为"Emp_id",而在另一个关系中表示为"Ssn"。

使用对象标识符 (OID) 进行高效检索

在数据库管理系统 (DBMS) 中,存储中对象的物理地址上的对象标识符 (OID) 被认为是不合适的。这是因为物理地址可能会在数据库的物理重组后发生变化。但是,一些早期的对象数据管理系统 (ODMS) 已将物理地址用作 OID,以提高对象检索的效率。

为了适应对象物理地址发生变化的情况,可以使用涉及间接指针的机制。该指针放置在前一个地址并提供对象的新物理位置。尽管如此,在现代实践中,更常见的是将长整数分配为 OID。随后,使用哈希表或类似的数据结构将 OID 值映射到存储中对象的当前物理地址。这种方法确保 OID 不受任何物理重组的影响,同时仍能高效地检索对象。

OID 的早期方法和挑战

在早期面向对象 (OO) 数据模型中,要求所有实体(包括简单值和复杂对象)都表示为对象。因此,每个基本值(如整数、字符串或布尔值)都分配有一个对象标识符 (OID)。这种方法允许相同的基本值拥有不同的 OID,这在某些情况下可能是有利的。例如,整数值 50 在一种情况下可以表示以公斤为单位的体重,而在另一种情况下可以表示一个人的年龄。通过创建两个具有不同 OID 的不同基本对象,两个对象都可以表示整数值 50。然而,虽然这种方法具有理论价值,但事实证明它不切实际,因为它导致生成大量 OID。

为了解决这一限制,大多数面向对象的数据库系统现在都支持对象和文字(或值)的表示。每个对象都必须分配一个不可变的 OID,以确保其唯一标识。相反,文字值不具备 OID,仅表示其自己的值。通常,文字值存储在对象内,不能被其他对象引用。此外,在许多系统中,如果需要,可以创建复杂的结构化文字值,而不需要相应的 OID。


相关文章