Oracle APEX 24.2 新特性 - AI驱动的数据建模

本文翻译自:https://blogs.oracle.com/apex/post/blog-create-data-model-using-ai

介绍

构建APEX应用程序的过程始终从一个基本步骤开始 - 在数据库模式中包含表。这些表构成了应用程序的基础,定义了数据的存储、管理和访问方式。

但仅仅有桌子是不够的。精心设计的架构对于确保应用程序的可扩展性、性能和可维护性至关重要。开发人员必须遵循数据库规范化等原则,以消除冗余、确保数据完整性并有效构建数据。他们还需要解决数据库设计的复杂问题,例如定义正确的主键和外键、创建适当的索引以及确保正确捕获实体之间的关系。

设计这样的模式需要丰富的数据库专业知识。开发人员需要深入了解关系建模原则和最佳实践,以确保架构不仅满足当前的应用程序需求,而且还可以根据未来的需求进行适当的扩展。

但如果这个基本任务可以简化呢?

凭借由AI提供支持的生成式开发(GenDev)重新定义 APEX 开发人员工具包(帮助在代码编辑器中使用 APEX Assistant 编写和调试代码,甚至创建整个APEX应用程序),为什么不将其功能扩展到模式设计呢? Oracle APEX 24.2 的最新功能:使用AI人工智能技术创建数据模型。

使用 AI 创建数据模型 - 功能概述

使用人工智能创建数据模型的一些主要亮点是:

  1. 使用AI创建架构:您可以通过提供高级需求来设计整个应用程序架构.
  2. 使用生成式人工智能服务:利用生成式人工智能服务来设计数据模型。
  3. 输出格式:您可以生成两种格式的模式:Oracle SQL和Quick SQL。
  4. 合成数据生成:您还可以为数据模型生成上下文准确的示例数据,以协助测试和原型设计。

使用案例:在线学习平台

在这篇博文中,我们将使用人工智能为在线学习平台设计一个数据模型。

图1.在线学习平台数据模型ERD图

先决条件:创建生成式AI服务

首先,我们需要建立一个生成式人工智能服务来帮助我们生成数据模型。要创建一个,请导航至Workspace Utilities > Generative AI Service并单击“创建” 。在此演示中,我们将使用OCI Generative AI Service作为AI Provider和meta.llama-3.2-90b-vision-instruct。此功能适用于您选择的任何AI提供商和模型。

确保App Builder使用开关已打开。这将激活工作区中的生成式AI功能。如果生成式AI功能在工作区中不可见,可能是因为生成式AI服务未启用“由应用程序生成器使用”开关。

图2.OCI生成式AI服务配置

完成后,让我们继续设计在线学习平台的数据模型。

使用人工智能进行数据建模

使用AI创建数据模型 选项位于 SQL Workshop > 实用程序 下。您还可以直接从 SQL Workshop 主页的“任务” (右侧部分)下访问它。

图3.在SQL Workshop实用程序下使用AI创建数据模型

单击此链接将打开 APEX Assistant,它与用于使用 Generative AI(在版本 24.1 中引入)生成 APEX 应用程序的 APEX Assistant 非常相似。

图4.使用 AI APEX Assistant 创建数据模型

APEX Assistant 对话框中的一个关键属性是 SQL 格式 开关,它允许您生成两种格式的数据模型:

  • Oracle SQL:以 Oracle SQL 格式生成 DDL 以创建必要的表、索引和其他对象。
  • Quick SQL:以 Quick SQL 速记语法生成数据模型,稍后可以将其转换为 Oracle SQL 以创建所需的数据库对象。

让我们从 Oracle SQL选项 开始。

我提供以下提示:“为包含学生、课程和教师等实体的在线学习平台创建数据模型。” APEX Assistant 会立即生成包含创建数据模型所需SQL的响应。

图5.使用AI创建数据模型 - 为在线学习平台创建数据模型

增强数据模型很容易,只需以对话方式提供附加提示即可。例如:“包括处理评估(测验、考试、项目)和学生成绩的表格。” APEX Assistant 合并了这些要求并相应地更新了数据模型。

图6.使用AI创建数据模型 - 通过附加提示增强数据模型

满意后,单击“创建SQL脚本”以查看生成的脚本并保存以供以后使用。

图7.查看SQL脚本下的脚本

查看生成的 SQL 脚本

让我们花点时间分解并查看生成的SQL脚本。

该脚本将自动创建以下7个表:olp_students、olp_courses、olp_instructors、olp_enrollments、 olp_course_instructors、olp_assessmentsolp_grades,包括这些表所需的DDL语句,以及用于建立它们之间关系的主键和外键。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
-- create tables
create table olp_students (
id number generated by default on null as identity
constraint olp_students_pk primary key,
student_id varchar2(255) not null,
name varchar2(255) not null,
email varchar2(255) not null unique,
password varchar2(255) not null,
created_on date not null,
created_by varchar2(255) not null,
updated_on date not null,
updated_by varchar2(255) not null,
row_version integer not null
)
/

create table olp_courses (
id number generated by default on null as identity
constraint olp_courses_pk primary key,
course_id varchar2(255) not null unique,
title varchar2(255) not null,
description varchar2(4000),
created_on date not null,
created_by varchar2(255) not null,
updated_on date not null,
updated_by varchar2(255) not null,
row_version integer not null
)
/

create table olp_instructors (
id number generated by default on null as identity
constraint olp_instructors_pk primary key,
instructor_id varchar2(255) not null unique,
name varchar2(255) not null,
email varchar2(255) not null unique,
created_on date not null,
created_by varchar2(255) not null,
updated_on date not null,
updated_by varchar2(255) not null,
row_version integer not null
)
/

create table olp_enrollments (
id number generated by default on null as identity
constraint olp_enrollments_pk primary key,
student_id number not null
constraint olp_enrollments_students_fk
references olp_students ( id ) on delete cascade,
course_id number not null
constraint olp_enrollments_courses_fk
references olp_courses ( id ) on delete cascade,
enrollment_date date not null,
created_on date not null,
created_by varchar2(255) not null,
updated_on date not null,
updated_by varchar2(255) not null,
row_version integer not null
)
/

它还将创建必要的索引,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
-- table index
create index olp_students_indx_1 on olp_students ( email )
/
create index olp_students_indx_2 on olp_students ( student_id )
/
create index olp_courses_indx_1 on olp_courses ( course_id )
/
create index olp_instructors_indx_1 on olp_instructors ( email )
/
create index olp_instructors_indx_2 on olp_instructors ( instructor_id )
/
create index olp_enrollments_indx_1 on olp_enrollments ( student_id )
/
create index olp_enrollments_indx_2 on olp_enrollments ( course_id )
/

此外,该脚本还为填充审核列的触发器生成DDL。它考虑了模型可能在APEX会话中运行的可能性,因此它通过使用以下命令从会话中获取APP_USER值来填充update_by列: sys_context(‘APEX$SESSION’, ‘APP_USER’)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
-- triggers
create or replace trigger olp_students_biu
before insert or update
on olp_students
for each row
begin
:new.updated_on := sysdate;
:new.updated_by := coalesce(sys_context('APEX$SESSION','APP_USER'),user);
if inserting then
:new.row_version := 1;
:new.created_on := :new.updated_on;
:new.created_by := :new.updated_by;
elsif updating then
:new.row_version := nvl(:old.row_version, 0) + 1;
end if;
end olp_students_biu;
/

create or replace trigger olp_courses_biu
before insert or update
on olp_courses
for each row
begin
:new.updated_on := sysdate;
:new.updated_by := coalesce(sys_context('APEX$SESSION','APP_USER'),user);
if inserting then
:new.row_version := 1;
:new.created_on := :new.updated_on;
:new.created_by := :new.updated_by;
elsif updating then
:new.row_version := nvl(:old.row_version, 0) + 1;
end if;
end olp_courses_biu;
/

create or replace trigger olp_instructors_biu
before insert or update
on olp_instructors
for each row
begin
:new.updated_on := sysdate;
:new.updated_by := coalesce(sys_context('APEX$SESSION','APP_USER'),user);
if inserting then
:new.row_version := 1;
:new.created_on := :new.updated_on;
:new.created_by := :new.updated_by;
elsif updating then
:new.row_version := nvl(:old.row_version, 0) + 1;
end if;
end olp_instructors_biu;
/

create or replace trigger olp_enrollments_biu
before insert or update
on olp_enrollments
for each row
begin
:new.updated_on := sysdate;
:new.updated_by := coalesce(sys_context('APEX$SESSION','APP_USER'),user);
if inserting then
:new.row_version := 1;
:new.created_on := :new.updated_on;
:new.created_by := :new.updated_by;
elsif updating then
:new.row_version := nvl(:old.row_version, 0) + 1;
end if;
end olp_enrollments_biu;
/

create or replace trigger olp_course_instructors_biu
before insert or update
on olp_course_instructors
for each row
begin
:new.updated_on := sysdate;
:new.updated_by := coalesce(sys_context('APEX$SESSION','APP_USER'),user);
if inserting then
:new.row_version := 1;
:new.created_on := :new.updated_on;
:new.created_by := :new.updated_by;
elsif updating then
:new.row_version := nvl(:old.row_version, 0) + 1;
end if;
end olp_course_instructors_biu;
/

create or replace trigger olp_assessments_biu
before insert or update
on olp_assessments
for each row
begin
:new.updated_on := sysdate;
:new.updated_by := coalesce(sys_context('APEX$SESSION','APP_USER'),user);
if inserting then
:new.row_version := 1;
:new.created_on := :new.updated_on;
:new.created_by := :new.updated_by;
elsif updating then
:new.row_version := nvl(:old.row_version, 0) + 1;
end if;
end olp_assessments_biu;
/

create or replace trigger olp_grades_biu
before insert or update
on olp_grades
for each row
begin
:new.updated_on := sysdate;
:new.updated_by := coalesce(sys_context('APEX$SESSION','APP_USER'),user);
if inserting then
:new.row_version := 1;
:new.created_on := :new.updated_on;
:new.created_by := :new.updated_by;
elsif updating then
:new.row_version := nvl(:old.row_version, 0) + 1;
end if;
end olp_grades_biu;
/

为您的数据模型生成真实的样本数据

此功能中的APEX助手允许您轻松生成示例数据以填充数据模型中的表。这些数据与现实世界的信息非常相似,有助于原型设计和测试数据模型。

图8.使用AI生成综合数据

如果需要特定的行数,可以在提示中指定所需的数量。

生成Quick SQL格式的数据模型

如果您熟悉 Quick SQL 速记语法,则可以选择以 Quick SQL 格式生成DDL。这种格式的优点之一是结构紧凑、简洁,与 Oracle SQL 相比,这可能会导致消耗更少的AI令牌。

图9.快速SQL格式

您可以单击“查看 Quick SQL”按钮来查看生成的 Quick SQL 脚本以及转换后的 Oracle SQL 以及ERD图(在“图表”选项卡下)。

图10.快速SQL到Oracle SQL

图11.快速SQL到图表

后续步骤:在数据模型之上创建应用程序

设计并准备好数据模型后,您现在可以继续基于此AI生成的数据模型生成APEX应用程序。例如,您可以使用“使用生成式人工智能生成应用程序”功能为在线学习平台创建应用程序蓝图。 APEX助手检查架构中的可用表(包括新生成的表),并将报告、表单和仪表板页面相应地合并到蓝图中。

图12.使用生成式AI创建应用程序

结论

在这篇博文中,我们了解了 Oracle APEX 24.2 的新“使用AI创建数据模型”功能如何帮助简化通常复杂且耗时的数据库模式设计过程。通过利用生成式人工智能的力量,开发人员现在可以根据高级应用程序需求创建高效、可扩展且结构良好的数据模型。此功能不仅有助于简化架构创建,还可以生成合成数据,从而支持测试和原型设计。

无论您是构建简单的应用程序还是为在线学习系统等复杂平台奠定基础,这种人工智能驱动的方法都可以显着减少手动工作量,使开发人员能够专注于更高价值的任务。随着人工智能不断重塑开发实践,采用此类工具可以极大地提高生产力,并确保您的应用程序构建在坚实、面向未来的基础上。

有了这项新功能,为您的APEX应用程序设计高效的数据模型变得前所未有的简单。

其他资源

本文标题:Oracle APEX 24.2 新特性 - AI驱动的数据建模

文章作者:王方钢 / Kenny Wang

发布时间:2025年01月19日 - 21:01

最后更新:2025年01月19日 - 22:01

原始链接:https://wangfanggang.com/Oracle/Oracle-APEX/apex-242-ai-model/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

王方钢 / Kenny Wang wechat
0%