2012-12-18 44 views
2

我必須爲數據庫表格設計架構。informix中的表格架構

它是這樣:

 field1 is TRUE/FALSE 
    field2 is TRUE/FALSE 
    field3 is TRUE/FALSE 
    field4 is TRUE/FALSE 
    field5 is char(50) if field4 is TRUE 

有人建議可以對這種表的最佳模式。

我正在使用Informix數據庫。

+0

哪個版本的Informix? –

回答

3

Informix有一個稍微奇特的BOOLEAN類型。您可能更喜歡使用fieldN CHAR(1) NOT NULL CHECK(fieldN IN ('Y', 'N'))(或IN('T', 'F'))。但BOOLEAN在其範圍內工作。

CREATE TABLE Anonymous 
(
    ID_Column  SERIAL NOT NULL PRIMARY KEY, 
    field1  BOOLEAN NOT NULL, 
    field2  BOOLEAN NOT NULL, 
    field3  BOOLEAN NOT NULL, 
    field4  BOOLEAN NOT NULL, 
    field5  CHAR(50), 
    CHECK((field4 = 't' AND field5 IS NOT NULL) OR (field4 = 'f' AND field5 IS NULL)) 
); 

't''f'是Informix的BOOLEAN的特殊性的一個;無法識別名稱TRUE和FALSE。

+0

Grumble:當我運行上面的SQL時,出現錯誤:'SQL -677:Check約束不能包含子查詢或過程。「這沒有多大意義。那裏沒有子查詢;那裏也沒有明確的程序調用。我不確定,但我認爲在約束中處理'field4'時必須有一個隱式過程調用。 –

+0

我認爲OP的TRUE/FALSE數據類型來自MS-Access。 Informix的BOOLEAN值是不區分大小寫的嗎?我更喜歡將INT或SMALLINT與CHAR(1)用於TRUE/FALSE,因爲它消耗較少的存儲空間並可能更快。 –

+0

看起來像引擎認爲CHECK是一種功能。嘗試刪除一組括號。 –

1

如果field4爲FALSE,field5應該是什麼?列的數據類型不能是有條件的或動態的!但是,如果您定義VARCHAR而不是CHAR,則大小可以是變量。如果field4爲FALSE,您可以添加一個額外的列。

field1 BOOLEAN, 
field2 BOOLEAN, 
field3 BOOLEAN, 
field4 BOOLEAN, 
field5 CHAR(50), {if field4 is TRUE} 
field6 DATATYPE {if field4 is FALSE} 
+0

如果'field4'中的值爲'false',那麼'field5'應該爲NULL。 –

+0

如果是這種情況,那麼不需要field6,因爲field5應該可以保留CHAR(50)並且它的值可以設置爲NULL,但是如果field4爲FALSE,OP沒有指定值應該是什麼。 –