1

私は HSQLDB 2.2.9 で開発しています。HSQLDB は、SQL 配列型をサポートする RDBMS の 1 つです。この機能を使用して、データベースの一部の機能に対処したいと考えています。

データベースを開発する際にいくつかのコマンド ライン クエリを実行しましたが、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 列には、各クライアントに固有の識別子が含まれています。私がこのデータベースを開発したとき、クライアントが 1 つまたは複数の mrn を持っている可能性があることを知りました。この問題の 1 つの解決策は、mrn 列を使用して、各クライアントの mrn の配列を格納することです。

この状況での UNIQUE のセマンティクスは何ですか? HSQLDB は、配列内の各要素が UNIQUE 列制約を満たしていると主張しますか?

この回答Can PostgreSQL has a uniqueness constraint on array elements? は、Postgres 9.1 が SQL 配列型要素に UNIQUE 列制約を適用できないことを示唆しています。これはHSQLDBにも当てはまるのではないかと思います。

4

1 に答える 1

2

HSQLDB は、配列に対する UNIQUE 制約をサポートしています。配列列に対する Unique 制約により、異なる行に格納されている配列全体が比較され、それらが明確に区別されます。

2 つの配列は、各インデックスに等しい要素があり、配列の長さが同じ場合、等しいと見なされます。

アプリケーションでは、配列に null が含まれていないこと、およびその要素がソートされていることを確認する必要があります。

于 2013-03-20T14:43:38.250 に答える