Navicat 博客

在 Navicat 17 中扩展 PostgreSQL 数据类型 2024 年 12 月 27 日,由 Robert Gravelle 撰写

定义域

以适当的格式存储数据可以确保数据完整性,防止错误,优化性能,并通过实施验证规则和支持高效数据管理来维护系统间的一致性。基于这些原因,顶级关系数据库(如PostgreSQL)提供了多种数据类型。此外,PostgreSQL允许通过“CREATE DOMAIN”和“CREATE TYPE”语句创建自定义数据类型,使开发人员能够扩展数据类型,以加强针对特定应用程序的数据验证、完整性和一致性。在今天的博文中,我们将学习如何通过 Navicat Premium 17 为免费的 DVD Rental database 创建一个自定义域。第二部分将介绍类型。

CREATE DOMAIN 和 CREATE TYPE 的快速比较

虽然 CREATE DOMAIN 和 CREATE TYPE 语句都可以用来创建用户定义的数据类型,但有一些关键区别需要注意:

  • CREATE DOMAIN 创建用户定义的数据类型,并带有 NOT NULL、CHECK 等约束条件。
  • CREATE TYPE 创建一个复合类型,作为存储过程中返回值的数据类型。

创建电子邮件定义域

定义域允许你在多个表中定义可重复使用的验证规则,从而集中约束管理,例如创建一个标准约束,防止 NULL 值,并为特定字段类型删减空白。下面的示例为电子邮件地址创建了一个带有验证检查的域:

CREATE DOMAIN email AS VARCHAR(255)
CHECK (
  VALUE ~ '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}$'
);

-- Use in a table definition
CREATE TABLE customer_contacts (
  customer_id INT,
  contact_email email
);

Navicat Premium 17Navicat for PostgreSQL 17 都提供一个基于图形用户界面的工具,用于生成定义域和类型,而无需用户了解所有确切的语法。你可以在主工具栏的“其他”下找到这两个工具。(这两个菜单项都在下面用 红色 框突出显示):

others_context_menu (45K)

其中的“域”工具包括四个选项卡:常规,检查,注释和 SQL 预览。

常规属性

所有定义域都基于一种基础类型。在本例中,就是 VARCHAR。选择“基础类型类别”中的“Base Type”后,我们可以从两个基础类型下拉菜单中选择“pg_catalog”和“varchar”。我们还需要确保 VARCHAR 的长度为 255。下面是包含所有这些信息的常规选项卡:

email_domain_general_tab (39K)

检查

在下一个选项卡中,我们可以定义一个或多个检查,以便在有人试图为我们的类型赋值时执行。 我们的检查将根据 RegEx(正则表达式)测试值:

email_domain_checks_tab (21K)

SQL 预览

此时,我们既可以继续保存域,执行生成的 CREATE DOMAIN 语句,也可以单击 SQL 预览选项卡,在保存之前查看语句:

email_domain_preview_and_save_as_dialog (38K)

请注意,域名是“无标题”,因为我们还没有保存定义。这是正常现象。

在表中使用电子邮件定义域

确认“电子邮件”域是否已创建的最佳方法是在表中试用。“dvdrental”数据库中的“staff”表包含一个电子邮件域。目前,它将值存储为 VARCHAR,没有进行任何验证检查。我们可以从表设计器的类型下拉菜单中选择“(Domain)”选项,然后为对象类型选择“public”和“email”,从而将类型更改为域:

setting_column_to_email_domain (92K)

保存表后,如果试图更改(或添加)不是有效电子邮件地址的值,就会违反约束:

failed_check (63K)

结语

通过为免费 dvdrental 数据库创建自定义域,我们了解了如何通过域来定义可重复使用的验证规则以帮助集中约束管理。在第 2 部分,我们将使用 Navicat Premium 17 的“类型”工具创建我们自己的类型。

Navicat 文章
频道条目
分享
文章归档