代码之家  ›  专栏  ›  技术社区  ›  scottb

HSQLDB UNIQUE约束和SQL数组类型

  •  1
  • scottb  · 技术社区  · 12 年前

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

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

    这个答案 Can PostgreSQL have a uniqueness constraint on array elements? 表明Postgres 9.1无法对SQL数组类型的元素强制执行UNIQUE列约束。我想知道HSQLDB是否也是如此。

    1 回复  |  直到 7 年前
        1
  •  2
  •   fredt    12 年前

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

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

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