2013-03-20 41 views
0

我正在開發HSQLDB 2.2.9。 HSQLDB是支持SQL數組類型的RDBMS之一,我想使用此功能來解決數據庫中的某些功能。HSQLDB UNIQUE約束和SQL數組類型

我在開發數據庫時一直在運行一些命令行查詢,但我不確定當聲明一個類型爲VARCHAR(24)ARRAY []的列時,HSQLDB如何處理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數組類型元素強制使用UNIQUE列約束。我想知道這是否也適用於HSQLDB。

+0

「數組解決了很多問題,但不應該用作表格的替代品。」這聽起來好像你的mrn應該放在一個單獨的表中,每個表都有一個對客戶端ID記錄的外鍵引用。查詢能夠處理這種事情。 – scottb 2015-01-16 05:17:25

回答

1

HSQLDB支持對數組的UNIQUE約束。對數組列的唯一約束導致存儲在不同行中的整個數組的比較,以確保它們是不同的。

當兩個數組在每個索引處具有相同的元素並且數組的長度相同時,兩個數組被視爲相等。

對於您的應用程序,您必須確保該數組不包含空值並對其元素進行排序。