我必須爲數據庫表格設計架構。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數據庫。
我必須爲數據庫表格設計架構。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數據庫。
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。
Grumble:當我運行上面的SQL時,出現錯誤:'SQL -677:Check約束不能包含子查詢或過程。「這沒有多大意義。那裏沒有子查詢;那裏也沒有明確的程序調用。我不確定,但我認爲在約束中處理'field4'時必須有一個隱式過程調用。 –
我認爲OP的TRUE/FALSE數據類型來自MS-Access。 Informix的BOOLEAN值是不區分大小寫的嗎?我更喜歡將INT或SMALLINT與CHAR(1)用於TRUE/FALSE,因爲它消耗較少的存儲空間並可能更快。 –
看起來像引擎認爲CHECK是一種功能。嘗試刪除一組括號。 –
如果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}
如果'field4'中的值爲'false',那麼'field5'應該爲NULL。 –
如果是這種情況,那麼不需要field6,因爲field5應該可以保留CHAR(50)並且它的值可以設置爲NULL,但是如果field4爲FALSE,OP沒有指定值應該是什麼。 –
哪個版本的Informix? –