HSQLDB UNIQUE 约束和 SQL 数组类型

Posted

技术标签:

【中文标题】HSQLDB UNIQUE 约束和 SQL 数组类型【英文标题】:HSQLDB UNIQUE constraint and SQL Array Type 【发布时间】:2013-03-20 01:32:53 【问题描述】:

我正在使用 HSQLDB 2.2.9 进行开发。 HSQLDB 是支持 SQL Array 类型的 RDBMS 之一,我想使用此功能来解决我数据库中的某些功能。

我在开发数据库时一直在运行一些命令行查询,但我不确定 HSQLDB 在为类型为 VARCHAR(24) ARRAY[] 的列声明时如何处理 UNIQUE 约束。我使用的 DDL 如下:

CREATE CACHED TABLE Clients ( 
    cli_id       INTEGER              GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
    mrn          VARCHAR(24) ARRAY    DEFAULT ARRAY[] NOT NULL UNIQUE,
    lastname     VARCHAR(48)          NOT NULL,
    firstname    VARCHAR(24)          NOT NULL,
    dob          INTEGER              DEFAULT 0 NOT NULL
);

mrn 列包含一个对每个客户端都是唯一的标识符。当我开发这个数据库时,我了解到一个客户可能有一个或多个 mrn。此问题的一种解决方案是使用 mrn 列为每个客户端存储一个 mrn 数组。

在这种情况下,UNIQUE 的语义是什么? HSQLDB 是否断言数组中的每个元素都满足 UNIQUE 列约束?

这个答案Can PostgreSQL have a uniqueness constraint on array elements? 表明 Postgres 9.1 无法对 SQL Array 类型元素强制执行 UNIQUE 列约束。我想知道 HSQLDB 是否也可能是这种情况。

【问题讨论】:

"数组解决了很多问题,但不应该用来代替表格。"在我看来,您的 mrn 应该在一个单独的表中,每个表都有一个对客户端 ID 记录的外键引用。查询能够处理这种事情。 【参考方案1】:

HSQLDB 支持对数组的 UNIQUE 约束。对数组列的唯一约束会比较存储在不同行中的整个数组,以确保它们是不同的。

当两个数组在每个索引处具有相等的元素并且数组的长度相同时,它们被认为是相等的。

对于您的应用程序,您必须确保数组不包含空值且其元素已排序。

【讨论】:

以上是关于HSQLDB UNIQUE 约束和 SQL 数组类型的主要内容,如果未能解决你的问题,请参考以下文章

HSQLDB 内存设置的 HSQLDB 约束违规和 SQL 查询日志

SQL中unique作用是啥

SQL unique约束的用法

SQL UNIQUE 约束

SQL UNIQUE 约束

SQL Server创建 学号 性别 课程编号 check约束 主键约束 UNIQUE约束