乐于分享
好东西不私藏

Oracle官方文档翻译《Database Concepts 26ai》第8章-应用程序数据使用

Oracle官方文档翻译《Database Concepts 26ai》第8章-应用程序数据使用

8 Application Data Usage(8 应用程序数据使用)

本章介绍数据用例域和模式注释的概念。

  • • Data Use Case Domains(数据用例域)
  • • Schema Annotations(模式注释)

Data Use Case Domains(数据用例域)

数据用例域是一个高级字典对象,属于某个模式,并封装了一组可选的属性和约束。

数据库以往对应用程序实际使用数据的方式理解有限。数据库使用诸如 VARCHAR2NUMBER 或 DATE 等基础类型来存储数据,而关于存储值所代表的含义(例如,信用卡号码或出生日期)的知识,仅存在于应用程序级的元数据或上下文中。这种方法增加了单个应用程序的复杂性,在不同工具和应用程序之间割裂了使用感知,并引入了语义分歧的可能性。

以往应对这种分歧的尝试,包括向数据库添加更多特定于用途的内置数据类型,并为可扩展性提供用户定义类型的支持。更精细的数据库类型系统采用率有限,因为它们增加了与应用程序语言类型的不匹配,产生了不可移植的应用程序代码,并且由于跨不同类型的操作受到限制而增加了开发复杂性。

通过使用 Oracle AI Database 所支持的、由 SQL 标准定义的扩展域概念,可以避免这种对数据使用表示的限制。使用这种方法,一个列既可以声明为具有基础数据类型(例如 NUMBER),也可以声明为具有一个用于表示数据用途的域,例如“温度”或“信用评分”。这样的用例域可以选择性地关联不同的使用属性,例如检查约束、显示属性、排序规则等。最重要的是,集中式的域信息可以被应用程序用来标准化操作,而无需应用程序级的元数据;例如,对信用卡号进行掩码处理、格式化电话号码和货币值、将列中的百分比值显示为饼图等等。

用例域不会修改底层数据类型,因此也可以添加到现有数据中,而不会破坏应用程序或产生可移植性问题。一个用例域可以声明用于表中的一列或多列,也可以用来表示可变的使用场景,其中数据的实际用法取决于其他列中的数据。可以将用例域视为轻量级的类型修饰符,用于集中记录应用程序的预期数据用途。此外,用例域还可用于共享注释。

删除带有相关用例域的表可能会产生与删除带有相关 PL/SQL 类型的表不同的结果。删除具有关联用例域或 PL/SQL 类型的表时,适用以下规则:

  • • 如果删除表时未使用 PURGE 子句,则该表在回收站中(如果回收站已启用)仍然可用,以备将来可能的恢复。

Copyright © 1993, 2026, Oracle and/or its affiliates.April 20, 2026Page 1 of 4


  • • 如果表中有一个列使用了 PL/SQL 类型或抽象数据类型,而另一个列关联了一个用例域,则:
    • • 使用 FORCE 子句删除用例域后,仍然允许恢复该表。该用例域只是与列取消关联。
    • • 删除 PL/SQL 类型时,无论是否使用 FORCE 子句,都将从回收站中清除该表,因为它无法被完全恢复。

用例域的特征:

  • • 约束 – 域可用于在多个表和列之间共享约束。对于可延迟约束,这些约束可能会被禁用。域中不允许使用主键和外键约束。
  • • 数据类型 – 允许所有内置的 Oracle 数据类型,但 longlong raw 和对象类型除外。
  • • 默认表达式 – 允许使用默认表达式,与列的默认值相同。
  • • 不区分大小写和重音的搜索 – 域允许进行不区分大小写的搜索,可在 WHERE 和 ORDER BY 子句中使用。
  • • 显示表达式 – 显示表达式允许自定义显示规则。例如,以本地格式显示货币。
  • • 排序表达式 – 排序表达式允许进行复杂的排序。例如,按照标准化的商业货币(如美元金额)进行排序。

用例域类型:

  • • 单列域 – 应用于单个数据列。
  • • 多列域 – 应用于多个列,例如货币。
  • • 灵活域 – 基于其他域,并且必须具有与子域兼容的数据类型。一个例子是适用于不同国家的地址格式。
  • • 枚举域 – 由一组名称组成,并且可选地,包含与名称对应的值。

严格 vs. 非严格:

  • • 非严格 – 非严格域必须与给定的数据类型匹配,但不必完全匹配数字数据的长度或精度。
  • • 严格 – 要求数据类型、长度和精度完全匹配。例如,货币代码必须恰好是两个或三个字符。

您可以使用 Oracle SQL 创建枚举域。与常规域不同,枚举域具有默认的 CHECK 约束以及显示表达式。枚举域内的名称可以在标量 SQL 表达式中允许使用字面量的任何地方使用,并且该域本身可以在 SELECT 语句的 FROM 子句中像表一样使用。枚举域是一种特殊类型的使用域,可以像任何单列域一样使用。

枚举域由一组名称组成,并且可选地,包含与名称对应的值。名称必须是有效的 SQL 标识符,并且每个指定的值必须是字面量,或者,在多列枚举的情况下,是字面量列表。虽然值可以是数据用例域支持的任何数据类型,但它们都必须具有相同的数据类型。


Chapter 8Data Use Case DomainsCopyright © 1993, 2026, Oracle and/or its affiliates.April 20, 2026Page 2 of 4


例如,已被授予 CREATE DOMAIN 权限的用户 SCOTT,为职位创建了一个单列枚举域。

CREATE DOMAIN Job_Title AS ENUM (    Clerk                  ='CLERK',    Salesman = SalesPerson ='SALESMAN',    Manager                ='MANAGER',    Analyst                ='ANALYST',    President              ='PRESIDENT'  );

现在,域 Job_Title 可在创建 EMP 表时用作数据类型。例如:

CREATE TABLE emp( empno     NUMBER(4)     CONSTRAINT emp_pk PRIMARY KEY,  ename     VARCHAR2(10),  job       Job_Title ,  mgr       NUMBER(4)     CONSTRAINT emp_mgr_fk REFERENCES emp(empno),  hiredate  DATE,  sal       NUMBER(7,2));

当插入新行数据时,可以使用枚举域来指定 JOB 列的值。以下三条 INSERT 语句是等价的。

INSERT INTO emp VALUES (8000'PATEL', Job_Title.Salesman, 7698, TO_DATE('11-MAR-2024''DD-MON-YYYY'), 3500);INSERT INTO emp VALUES (8000'PATEL', Job_Title.SalesPerson, 7698, TO_DATE('11-MAR-2024''DD-MON-YYYY'), 3500);INSERT INTO emp VALUES (8000'PATEL''SALESMAN'7698, TO_DATE('11-MAR-2024''DD-MON-YYYY'), 3500);

相关主题

  • • Using Application Usage Domains(应用程序使用域的使用)

Schema Annotations(模式注释)

对于许多应用程序来说,为数据库对象(如表、视图、表列、索引和域)维护额外的属性元数据非常重要。

虽然域包含了内置的使用属性,如检查约束、排序规则、自定义排序顺序等,但为了可扩展性,Oracle 数据库还提供了通过 ANNOTATIONS 机制为数据库元数据(包括表列、表、索引等)添加自定义属性的功能。应用程序通常需要维护额外的属性元数据,特别是用于渲染用户界面或自定义应用程序逻辑。

列级使用属性的一些示例可能包括:


Chapter 8Schema AnnotationsCopyright © 1993, 2026, Oracle and/or its affiliates.April 20, 2026Page 3 of 4


  • • 显示标签(Display Label):这可能与列名不同(例如,将名为 Employee_Salary 的列的标题显示为“工资”)
  • • 列组(Column Group):在许多情况下,一个“列组”对于用户界面是很有用的(例如,将“街道编号”、“街道名称”、“城市”和“邮政编码”列组合成一个“地址”组)
  • • 格式掩码(Format Mask):例如,用户界面工具可以使用 $99,999.99 的显示掩码将 56434 渲染为 $56,434.00
  • • 隐藏(Hide):是否在用户界面中向最终用户显示该列(例如,不向某类最终用户显示包含敏感信息或系统添加的列)
  • • 高亮(Highlight):该列是否应以特殊的高亮方式显示
  • • 允许的操作(Allowed Operations):允许界面确定是否允许列支持排序、分组、显示值列表等操作。

类似地,表级使用属性可用于帮助应用程序记录表是否包含敏感信息、其显示名称应该是什么、它在应用程序中由哪个模块拥有或管理等等。

大多数应用程序为此类使用元数据创建自己的存储库,这导致了开发的复杂性,以及跨应用程序、模块和微服务出现分歧的可能性。

Oracle AI Database 模式注释是一种轻量级的声明式机制,供开发人员为数据库模式对象集中注册使用属性。注释直接存储在数据库内部的字典表中,与数据模型定义和数据本身一起,可供任何应用程序使用,以便跨通用数据标准化行为,但数据库不会以任何方式对其进行解释。应将其视为数据库元数据的轻量级标准化标记,供应用程序用于注册和处理扩展的、自定义的使用属性。

相关主题

  • • Oracle AI Database Development Guide(Oracle AI 数据库开发指南)

Chapter 8Schema AnnotationsCopyright © 1993, 2026, Oracle and/or its affiliates.April 20, 2026Page 4 of 4