Oracle SQL Developer Data Modeler(以下简称 Data Modeler)是 Oracle 提供一个免费数据建模工具,它既可作为 SQL Developer 的扩展模块使用,也能独立安装运行。该工具覆盖了需求分析阶段的概念模型、逻辑模型、关系模型以及最终面向数据库的物理模型,尤其适合 Oracle 数据库项目。更重要的是,它能直接读取数据库的数据字典并生成可视化模型,也能把设计好的模型一键生成建表语句。对没有专门建模预算的团队来说,Data Modeler 算是一个比较完整的方案。

一、认清三种模型:逻辑、关系与物理
在开始建模前,先要决定创建哪种模型。Data Modeler 支持逻辑模型、关系模型和物理模型。逻辑模型偏向业务概念,不关心具体数据库类型;关系模型在逻辑模型基础上补充了外键、约束等信息;物理模型则直接对应某一种数据库的存储结构,比如 Oracle 12c、19c 或 MySQL。理解这个区别能避免出现把业务实体和物理表混在一起设计的问题。
新建设计时可以指定模型类型和默认的表示法。常用的表示法有 Barker 表示法和 Information Engineering(IE)表示法。Barker 表示法适合表达业务规则,能清楚显示可选性和基数;IE 表示法更接近传统 ER 图,适合开发人员阅读。选定表示法后,建议在设计属性中设置统一的命名规则、主键命名模板和注释规范,例如主键采用“表名_ID”还是“ID”都应在这一步统一。
另外,Data Modeler 支持按主题区域划分模型,当一个项目包含几十张甚至上百张表时,可以通过 SubView 和 Display 设置把相关的实体放在同一张图中,避免画布过于拥挤。工程文件保存为 .dmd 格式,如果需要多人协作,也可以导出为 XML 或利用版本控制工具管理。
二、实体与关系定义中的实用技巧
实体的创建并不复杂,但真正影响模型质量的是属性定义和约束设置。每个实体都需要明确主键,Data Modeler 会根据命名规则自动生成主键约束名称。对于业务中常见的唯一性要求,比如用户表的登录名、产品表的SKU等,应该在属性级别添加唯一约束,而不是依赖应用层校验。检查约束也非常有用,例如订单金额必须大于零、日期范围必须合法,都可以直接在模型里表达。
定义关系时,最需要注意的是标识关系和非标识关系的区别。标识关系表示子实体的主键中包含父实体的主键,常见于订单头和订单行这类组合关系;非标识关系仅仅是外键引用,不影响子实体自身的唯一标识。如果是多对多关系,Data Modeler 会自动创建关联实体,但自动生成的关联实体还需要手动补充属性和唯一约束,否则后续生成表时会缺少业务字段。
子类型和超类型是数据建模中比较容易忽视的部分。比如一个系统中有个人客户和企业客户,两者既有共同属性又有各自特有的属性。使用 Data Modeler 的 Subtype 功能可以建立超类型实体,并设置继承方式。生成物理模型时可以选择合并成一个表、拆成多个表或者保留超类型表加子类型表。不同选择会直接影响查询复杂度和数据一致性,需要结合业务访问模式判断。
三、正向工程:从模型生成建表脚本
模型设计完成后,可以进入物理模型进行更细粒度的设置,比如表空间、分区、索引和存储参数。Data Modeler 支持从关系模型直接生成物理模型,也可以跳过关系模型直接创建物理模型。如果目标是 Oracle 数据库,建议在这一步把表空间和索引表空间分开,并设置好 PCTFREE、LOGGING 等参数。这些参数虽然在后面也能改,但如果在模型阶段就定下来,后续脚本会更一致。
点击正向工程可以生成 DDL 脚本,工具会按照实体、约束、索引、触发器的顺序输出。生成脚本前可以勾选是否包含注释、是否生成 DROP 语句、是否包含表空间子句等。以下是一段简化后的 Oracle 建表脚本,展示了主键、外键和唯一约束的生成效果。
CREATE TABLE departments (
department_id NUMBER(4) PRIMARY KEY,
department_name VARCHAR2(30) NOT NULL,
location_id NUMBER(4)
);
CREATE TABLE employees (
employee_id NUMBER(6) PRIMARY KEY,
first_name VARCHAR2(20),
last_name VARCHAR2(25) NOT NULL,
salary NUMBER(8,2),
department_id NUMBER(4) NOT NULL,
CONSTRAINT uk_emp_name UNIQUE (first_name, last_name),
CONSTRAINT fk_emp_dept FOREIGN KEY (department_id)
REFERENCES departments(department_id)
);
需要注意,自动生成的脚本并不总是完全符合生产要求,例如触发器、序列和同义词通常需要单独配置。因此在生成脚本后,最好由有经验的 DBA 做一次评审,尤其是权限授予和存储过程依赖部分。对于开发环境,可以直接在工具内选择“生成到数据库”执行,但对于生产环境,建议导出成文本文件走变更流程。
四、逆向工程与模型比对
当接手一个没有文档的存量数据库时,逆向工程能极大节省梳理时间。Data Modeler 可以直接通过 JDBC 连接 Oracle、MySQL、PostgreSQL 等数据库,读取数据字典并生成关系模型。导入时可以选择只导入某个 Schema 的对象,也可以按表名过滤。生成后的模型通常需要调整显示位置,但表和字段的原始定义都能完整保留。
逆向工程还有一个常用场景是模型比对。当数据库结构发生变更,而模型文件还停留在旧版本时,可以先把当前数据库重新导入,再与原有设计模型进行比对。比对结果会按新增、删除、修改三类列出差异,比如索引被删除、字段长度调整、约束重命名等都会显示出来。这个过程对有版本发布要求的项目非常有用,也能防止开发人员在模型文件之外私自修改数据库。
Data Modeler 还能生成数据字典报告,支持 HTML、PDF 等格式。报告里包含表、字段、约束、关系图以及注释信息,可以直接作为项目交付文档使用。建议在每次发布前输出一份完整报告,随发布包一起归档,这样即使后续人员更替,也能快速理解数据结构。
Oracle SQL Developer Data Modeler数据建模数据库设计修改时间:2026-09-25 20:44:14