HSQLDB唯一约束和SQL数组类型
我正在使用HSQLDB2.2.9进行开发。HSQLDB是支持SQL数组类型的RDBMS之一,我想使用此功能解决数据库中的一些功能 在开发数据库时,我一直在运行一些命令行查询,但我不确定在为VARCHAR(24)ARRAY[]类型的列声明时,HSQLDB如何处理唯一约束。我使用的DDL如下所示: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
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记录的外键引用。查询能够处理这类事情。