应用程序数据使用量
本章介绍了哪些数据用例域和方案注释。
数据用例域
数据用例域是属于方案并封装一组可选属性和约束的高级字典对象。
数据库通常对应用程序实际使用数据的理解有限。数据库使用基元类型(例如 VARCHAR2、NUMBER 或 DATE)存储数据,而存储值表示(例如,信用卡号或出生日期)仅存在于应用程序级别的元数据或上下文中。此方法可提高单个应用程序的复杂性,在工具和应用程序中对使用情况的了解,并引入了不同语义的可能性。
过去试图消除这种差异的尝试是向数据库添加更多特定于使用情况的内置数据类型,并为用户定义的类型提供可扩展性支持。更复杂的数据库类型系统采用率有限,因为它们增加了与应用程序语言类型的不匹配,创建了不可移植的应用程序代码,并增加了开发复杂性,因为跨不同类型的操作受到限制。
通过使用 SQL 标准定义的 Oracle AI Database 扩展域概念,可以避免对表示数据使用的此类限制。使用此方法,既可以使用基元数据类型(例如 NUMBER)声明列,也可以使用用于数据使用的域(例如“温度”或“信用评分”)声明列。此类用例域可以选择性地与不同的用例属性关联,例如检查约束、显示属性、排序规则等。最重要的是,应用程序可以使用集中式域信息来标准化操作,而无需应用程序级元数据;例如,屏蔽信用卡号、设置电话号码和货币值的格式、将列中的百分比值显示为饼图等。
用例域不修改底层数据类型,因此也可以在不破坏应用程序或创建可移植性问题的情况下添加到现有数据。可以为表中的一个或多个列声明用例域,也可以用于表示可变用例方案,其中数据的实际用法取决于其他列中的数据。用例域可以被视为轻量级类型修饰符,用于集中记录应用程序的预期数据使用情况。此外,使用场景域还可以用于共享注释。
删除具有关联用例域的表会产生与删除具有关联 PL/SQL 类型的表不同的结果。删除具有关联用例域或 PL/SQL 类型的表时,适用以下规则:
-
如果删除了没有
PURGE子句的表,则回收站(如果启用了回收站)中仍会提供该表,以供将来可能恢复。 -
如果表具有使用 PL/SQL 类型或抽象数据类型的列,以及与用例域关联的另一列,则:
-
使用
FORCE子句删除用例域仍将允许恢复表。用例域只是与列取消关联。 -
删除带有或不带
FORCE子句的 PL/SQL 类型将从回收站中清除表,因为无法完全恢复该表。
-
使用案例域的特点:
-
Constraints(约束) - 域可用于在多个表和列之间共享约束。可以为可延迟约束条件禁用这些约束条件。域中不允许使用主键和外键约束条件。
-
数据类型 - 允许使用所有内置的 Oracle 数据类型,但长、长原始和对象类型除外。
-
默认表达式 - 允许使用默认表达式,这与列默认值相同。
-
Case and Accent insensitive search(区分大小写和不区分重音的搜索) - 域允许在
WHERE和ORDER BY子句中使用不区分大小写的搜索。 -
显示表达式 - 显示表达式允许自定义显示规则。例如,以本地格式显示货币。
-
Order expression(顺序表达式) - 顺序表达式允许进行复杂的排序。例如,按标准化标准业务货币(如美元金额)排序。
用例域类型:
-
Single column(单列) - 应用于单个数据列。
-
多列 - 应用于多个列,例如货币。
-
灵活域 - 基于其他域,并且必须与子域兼容数据类型。例如,不同国家/地区的地址格式。
-
枚举 - 包含一组名称,以及与名称对应的值(可选)。
严格与非严格:
-
非严格 - 非严格域必须与给定数据类型匹配,但不一定是数字数据的长度或比例。
-
严格 - 要求数据类型、长度和比例完全匹配。例如,货币代码必须正好是两个或三个字符。
您可以使用 Oracle SQL 创建枚举域。与常规域不同,枚举域具有默认的 CHECK 约束条件和显示表达式。只要标量 SQL 表达式中允许使用文字,便可使用枚举域内的名称,并且可以在 SELECT 语句的 FROM 子句中使用域本身,就像它是表一样。枚举域是一种特殊类型的使用域,可以像任何单列域一样使用。
枚举域由一组名称和(可选)与名称对应的值组成。名称必须是有效的 SQL 标识符,并且每个指定的值都必须是文字值,或者,如果是多列枚举,则必须为文字列表。虽然这些值可以是数据用例域支持的任何数据类型,但它们都必须具有相同的数据类型。
例如,以前被授予 CREATE DOMAIN 权限的用户 SCOTT 为职务名称创建单列枚举域。
CREATE DOMAIN Job_Title AS
ENUM (
Clerk = 'CLERK',
Salesman = SalesPerson = 'SALESMAN',
Manager = 'MANAGER',
Analyst = 'ANALYST',
President = 'PRESIDENT'
);
现在,在创建 EMP 表时,可以将域 Job_Title 用作数据类型。例如:
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);
相关主题
方案注释
对于许多应用程序,维护数据库对象(如表、视图、表列、索引和域)的其他属性元数据非常重要。
虽然域包括内置的使用属性(如检查约束条件、整理、定制排序顺序等),但为了实现可扩展性,Oracle 数据库还提供了通过 ANNOTATIONS 机制为数据库元数据(包括表列、表、索引等)添加定制属性的功能。应用程序通常需要维护其他属性元数据,特别是用于呈现用户界面或定制应用程序逻辑。
列级使用属性的一些示例包括:
-
显示标签:这可能与列名不同(例如,显示标题为“薪金”的列名 Employee_Salary)
-
列组:在许多情况下,列“组”对于用户界面很有用(例如,将“街道编号”、“街道名称”、“城市”和“邮政编码”列分组到“地址”组中)
-
格式掩码:例如,用户界面工具可以使用显示掩码
$99,999.99将 56434 呈现为$56,434.00 -
隐藏:是否在用户界面中向最终用户显示该列(例如,不向特定类别的最终用户显示包含敏感信息的列或系统添加的列)
-
高亮:列是否应以特殊高亮显示
-
允许的操作:允许接口确定是否允许列支持排序、分组、显示值列表等。
表级使用属性同样可用于帮助应用程序记录表是否包含敏感信息、其显示名称应是什么、其拥有或管理的应用程序中的哪些模块等等。
大多数应用程序会为此类使用元数据创建自己的资料档案库,从而导致开发人员复杂性,并可能导致应用程序、模块和微服务之间存在差异。
Oracle AI Database Schema annotations 是一个轻量级声明工具,可供开发人员集中注册数据库方案对象的使用属性。注释直接存储在数据库中的字典表中以及数据模型定义和数据本身,并且可供任何应用程序使用,以便对公用数据的行为进行标准化,但数据库不会以任何方式进行解释。它们应被视为数据库元数据的轻量级标准化标记,供应用程序用来注册和处理扩展和定制使用属性。
相关主题