第三十八章 持久对象和SQL - 持久类的特殊选项

持久类的特殊选项

IRIS 中,所有持久类都在中扩展 %Library.Persistent(也称为 %Persistent)。此类为 IRIS 中的对象 SQL 对应关系提供了大部分框架。在持久类中,有如下选项:

  • 能够使用方法打开、保存和删除对象。

当打开持久对象时,可以指定并发锁定的程度,因为持久对象可能会被多个用户或多个进程使用。

当打开对象实例并引用对象值属性时,系统也会自动打开该对象。此过程称为混合。然后也可以使用该对象。在下面的示例中,当打开 Sample.Person 对象时,会混合相应的 Sample.Address 对象:

 Set person=##class(Sample.Person).%OpenId(10)
 Set person.Name="Andrew Park"
 Set person.Address.City="Birmingham" 
 Do person.%Save()
import iris
person=iris.cls("Sample.Person")._OpenId(10)
person.Name="Andrew Park"
person.Address.City="Birmingham"
person._Save()

类似地,当你保存一个对象时,系统也会自动保存它的所有对象值属性;这称为深度保存。可以选择执行浅保存。

  • 能够使用默认查询(范围查询),该查询是包含此类对象数据的 SQL 结果集。默认情况下,范围查询返回范围内的现有 ID。可以对其进行修改以返回更多列。

在此类(或其他类)中,可以定义其他查询。

  • 能够定义作为外键映射到 SQL 的类之间的关系。

关系是一种特殊类型的对象值属性,它定义两个或多个对象实例如何相互关联。每个关系都是双面的:对于每个关系定义,都有一个相应的逆关系定义另一面。 IRIS 自动强制执行数据的引用完整性,一侧的任何操作在另一侧立即可见。关系自动管理它们在内存中和磁盘上的行为。它们还提供了优于对象集合的扩展性和并发性(请参阅集合类)。

  • 能够定义外键。在实践中,可以添加外键来向现有应用程序添加引用完整性约束。对于新应用程序,定义关系更简单。
  • 能够在这些类中定义索引。

索引提供了一种优化跨持久类实例的搜索的机制;它们定义了与某个类相关的常用请求数据的特定排序子集。它们对于减少性能关键型搜索的开销非常有帮助。

索引可以根据属于其类别的一个或多个属性进行排序。这使可以对返回结果的顺序进行大量特定控制。

此外,索引还可以存储基于排序属性的查询经常请求的附加数据。通过包含附加数据作为索引的一部分,可以极大地提高使用索引的查询的性能;当查询使用索引生成其结果集时,它可以在不访问主数据存储设施的情况下执行此操作。

  • 能够在这些类中定义触发器来控制插入、修改或删除行时发生的情况。
  • 能够将方法和类查询映射为 SQL 存储过程。
  • 能够微调 SQL 的映射(例如,指定 SQL 查询中看到的表和列名称)。
  • 能够微调存储对象数据的Global的结构。

注意:无法在 Python 中定义关系、外键或索引。

09-28 17:30