我必须为数据库表设计模式。
就像:
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 :(得分: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无法识别。
答案 1 :(得分: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}