对象标识,对象与字面量
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。