HSQLDB唯一约束和SQL数组类型

HSQLDB唯一约束和SQL数组类型,sql,types,hsqldb,ddl,unique-constraint,Sql,Types,Hsqldb,Ddl,Unique Constraint,我正在使用HSQLDB2.2.9进行开发。HSQLDB是支持SQL数组类型的RDBMS之一,我想使用此功能解决数据库中的一些功能 在开发数据库时,我一直在运行一些命令行查询,但我不确定在为VARCHAR(24)ARRAY[]类型的列声明时,HSQLDB如何处理唯一约束。我使用的DDL如下所示: CREATE CACHED TABLE Clients ( cli_id INTEGER GENERATED BY DEFAULT AS IDENTITY

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

在开发数据库时,我一直在运行一些命令行查询,但我不确定在为VARCHAR(24)ARRAY[]类型的列声明时,HSQLDB如何处理唯一约束。我使用的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是否断言数组中的每个元素都满足唯一列约束


这个答案表明Postgres 9.1无法对SQL数组类型的元素强制执行唯一列约束。我想知道HSQLDB是否也是这样。

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

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


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

“数组解决了许多问题,但不应用作表的替代品。”在我看来,您的mrn应该位于单独的表中,每个表都有一个指向客户端id记录的外键引用。查询能够处理这类事情。