当前位置: 首页 > article >正文

在 Navicat 17 中扩展 PostgreSQL 数据类型 - 范围类型

范围类型

PostgreSQL 是市场上最灵活的数据库之一,这已不是什么秘密。事实上,PostgreSQL 的可扩展性和丰富的功能集使 PostgreSQL 近期已超越 MySQL,成为最受开发人员推崇和最受欢迎的数据库系统。在这个使用 Navicat Premium 17 在 PostgreSQL 创建自定义数据类型的系列中,我们已经探索了一些选项,包括自定义域、复合类型和枚举类型。本周博客的主题是范围类型,当你需要处理连续区间或数值范围时,范围类型特别有用。

复合类型

创建自定义域

枚举类型

范围类型的简要说明

PostgreSQL 中的范围类型提供了一种处理连续区间值的方法。因此,一个范围可以包括 10 美元到 20 美元之间的所有产品价格。通过这些范围,你可以处理在其范围内的任何值,从而轻松检查计划冲突或价格匹配等问题。在数据库中,如果需要处理连续的时间跨度、数字区间或任何其他连续数据,范围尤其有用。

例如,在一家电影院的数据库中,你可以使用范围来表示放映时间,确保没有两部电影在同一影院重映。或者,在酒店预订系统中,范围可以跟踪客房空房日期,方便检查空房冲突。范围类型特别有用,因为PostgreSQL可以处理所有比较和操作这些区间的复杂逻辑,提供内置操作来检查范围之间的重叠、包含和交叉。

在下一节中,我们将使用 Navicat Premium 17 和 免费 DVD 租借数据库 举几个实际例子。

定义电影放映时间范围

在考虑自定义范围类型之前,我们应该确认下 PostgreSQL 的内置范围类型是否能实现我们的目标。这些类型包括:

  • int4range:整数范围
  • int8range:bigint 的范围
  • numrange:数字范围
  • tsrange: 不含时区的时间戳范围
  • tstzrange:包含时区的时间戳范围
  • daterange:日期范围

虽然 DVD Rental 数据库中的电影放映时间是以整数形式存储的,但当我们有特定的业务需求而内置类型又无法满足时,创建我们自己的范围类型还是很有意义的。例如,如果我们要跟踪具有特殊验证规则的影片放映时间范围:

-- Creating a custom minutes range type with specific validation
CREATE TYPE runtime_range AS RANGE (
    subtype = integer,
    subtype_diff = int4mi
);

CREATE TABLE film_runtime_categories (
   category_name VARCHAR(50),
   typical_runtime runtime_range,
   CHECK (lower(typical_runtime) >l= 30 AND upper(typical_runtime) <= 240)
);

-- Adding rows to the table
INSERT INTO film_runtime_categories VALUES 
   ('Short Film', '[30,45]');

INSERT INTO film_runtime_categories VALUES 
   ('Feature Film', '[75,180]');

在 Navicat 17 中创建范围类型

定义自定义类型的更简单方法是使用 Navicat 基于图形用户界面的工具。你可以在 Navicat Premium 17 和 Navicat for PostgreSQL 17 中找到它们。若要访问类型工具,只需单击主工具栏中的“其他”,然后从下拉菜单中选择“类型”:

type_menu_command (33K)

这将弹出“对象”窗格,我们将看到现有类型的列表。若要创建新类型,请单击“对象”工具栏中“新建类型”项旁边的箭头,然后从上下文菜单中选择“范围”项:

range_menu_item (31K)

范围类型设计器有三个选项卡:常规、注释和 SQL 预览。在常规选项卡上,我们需要提供的主要信息是“子类型”和“子类型差异”。我们的类型将以 int4 为基础,如下所示:

range_type_general_tab (35K)

在单击“保存”按钮之前,我们可以通过单击“SQL 预览”选项卡查看 Navicat 将生成的语句:

range_type_sql_preview (22K)

注意到类型名称是“无标题”,因为我们还没有保存定义。这是意料之中的。

点击“保存”按钮后,我们将看到一个“另存为”对话框,在此我们可以将类型命名为 “runtime_range ”:

range_type_save_as_dialog (38K)

现在,我们可以像使用其他 PostgreSQL 数据类型一样使用“runtime_range”类型。例如,如果我们创建了上面例子中的“film_runtime_categories”表,我们可以从“对象类型”下拉菜单中选择“typical_runtime”列,将其设置为我们的自定义类型:

runtime_range_type_in_table_designer (74K)

然后,我们就可以在“检查”选项卡上添加字段验证:

typical_runtime_check (42K)

结语

在今天的博客中,我们使用 Navicat Premium 17 的类型工具创建了一个范围类型,并创建了一个以自定义类型为特色的新表。在第 5 部分,我们将通过扩展基本类型来结束本系列。

PostgreSQL 相关文章

在 Navicat 17 中扩展 PostgreSQL 数据类型 | 创建自定义域

为什么在下一个 IT 项目中选择使用 PostgreSQL

为什么说Navicat与PostgreSQL是数据库行业的中流砥柱?

探索 PostgreSQL 的高级数据类型 | 数组和枚举

探索 PostgreSQL 的高级数据类型 | DML/SQL 语句

PostgreSQL 的实体化视图介绍

PostgreSQL 实体化视图的使用

PostgreSQL 中的多版本并发控制

Navicat 面向 PostgreSQL 查询超时的工具解决方案

在 Navicat Monitor 3 中查看 PostgreSQL 实例详细信息

使用 Navicat Monitor 3 跟踪 PostgreSQL 实例查询

使用 Navicat Monitor 3.0 监控 PostgreSQL


http://www.kler.cn/a/543795.html

相关文章:

  • Windows中使用Docker安装Anythingllm,基于deepseek构建自己的本地知识库问答大模型,可局域网内多用户访问、离线运行
  • 图书管理项目(spring boot + Vue)
  • 【CXX-Qt】1 CXX-Qt入门
  • docker.service job docker.service/start failed with result ‘dependency‘
  • 网络安全与AI:数字经济发展双引擎
  • 手写一个C++ Android Binder服务及源码分析
  • NLP深度学习 DAY7:平滑、语境学习、Scaling Law、大模型的发展、LLM的构建流程
  • 【Java】详细讲解数据类型与运算符
  • PlantUML 总结
  • 使用 EDOT 监测由 OpenAI 提供支持的 Python、Node.js 和 Java 应用程序
  • Ubuntu 上安装 Elasticsearch 7.6.0
  • ubuntu22.04可视化界面
  • 如何在Excel和WPS中进行翻译
  • Java 后端开发工程师进阶路线
  • Android10 音频参数导出合并
  • 机器学习核心算法解析
  • QT 5.15.2 开发地图ArcGIS 100.15.6(ArcGIS Runtime SDK for Qt)
  • Java8新特性Optional,Function,Supplier,Consumer
  • 【Cocos TypeScript 零基础 15.1】
  • Jenkins 部署 之 Mac 一
  • ASP.NET Core SignalR实践指南
  • 如何在Java EE中使用标签库?
  • 【实战指南】使用OpenVINO C# API轻松部署飞桨PP-OCRv4模型
  • 讲解ES6中的变量和对象的解构赋值
  • C++ STL容器之set使用及复现
  • 【Go】01输入输出