Database informix中表的模式

Database informix中表的模式,database,informix,Database,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数据库。如果field4为FALSE,那么field5应该是什么?列的数据类型不能是有条件的或动态的!但

我必须为数据库表设计模式

它是这样的:

     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数据库。

如果field4为FALSE,那么field5应该是什么?列的数据类型不能是有条件的或动态的!但是,如果定义VARCHAR而不是CHAR,则大小可以是可变的。如果字段4为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应该是什么?列的数据类型不能是有条件的或动态的!但是,如果定义VARCHAR而不是CHAR,则大小可以是可变的。如果字段4为FALSE,则可以添加一个附加列

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

Informix有一个稍微奇特的布尔类型。您可能更喜欢使用
fieldN CHAR(1)非空检查(fieldN IN('Y','N'))
(或
IN('T','F')
)。但是布尔运算在它的范围内工作

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。

Informix有一种稍微奇特的布尔类型。您可能更喜欢使用
fieldN CHAR(1)非空检查(fieldN IN('Y','N'))
(或
IN('T','F')
)。但是布尔运算在它的范围内工作

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。

如果
field4
中的值为
FALSE
,则
field5
可能为空。如果是这种情况,则不需要使用field6,因为field5应保留字符(50),并且其值可以设置为空,但是OP没有指定字段4为FALSE时的值。如果
field4
中的值为
FALSE
,则
field5
应该为NULL。如果是这样,则不需要字段6,因为field5应该保持CHAR(50)并且其值可以设置为NULL,但是OP没有指定如果field4为FALSE,值应该是什么。抱怨:当我运行上面的SQL时,我得到了错误:
SQL-677:Check约束不能包含子查询或过程。
这没有多大意义。那里没有子查询;这里也没有显式的过程调用。我不确定,但我假设在约束中处理
field4
时必须有一个隐式过程调用。我认为OP的真/假数据类型来自MS Access。Informix的布尔值是否不区分大小写?我更喜欢使用INT或SMALLINT vs.CHAR(1)表示真/假,因为它占用更少的存储空间,而且可能更快;语义解释是可疑的。将类型从BOOLEAN更改为CHAR(1),约束就可以了。这是IDS(在Mac OS X 10.7.5上验证为11.70.FC6)中的一个奇怪错误。它的工作原理是:
CREATE TABLE t(i INTEGER NOT NULL,s CHAR(12)NOT NULL,CHECK((i>10,s NOT NULL)或(i)因为BOOLEAN被IDS视为“扩展类型”而不是“内置”类型,并且您不能在检查约束中调用UDR,但条件要求调用UDR,并且……可以说,它是一种“稍微特殊”的类型;我可能会坚持使用“CHAR(1)”取而代之的是,有很多复杂的历史可以追溯到1995年,当时Informix接管了Illustra并将Illustra集成到Informix中以创建IUS(Informix通用服务器).抱怨:当我运行上面的SQL时,我得到了一个错误:
SQL-677:Check约束不能包含子查询或过程。
这没有多大意义。其中没有子查询;也没有显式过程调用。我不确定,但我假设在处理<约束中的code>field4
。我认为OP的真/假数据类型来自MS Access。Informix的布尔值不区分大小写吗?我更喜欢使用INT或SMALLINT vs.CHAR(1)对于TRUE/FALSE,因为它占用更少的存储空间,而且可能更快。语法正确;语义解释可疑。将类型从BOOLEAN更改为CHAR(1),约束就可以了。这是IDS中的一个奇怪的错误(在Mac OS X 10.7.5上验证了11.70.FC6)。这起作用:
创建表t(i INTEGER NOT NULL,s CHAR(12)NOTNULL、CHECK((i>10且s不为NULL)或(i),因为BOOLEAN被ID视为“扩展类型”而不是“内置”类型,并且您不能在CHECK约束中调用UDR,但该条件需要调用UDR,而且……可以说,它是一种“稍微特殊”的类型;我可能会坚持使用“CHAR(1)”相反,有很多复杂的历史可以追溯到1995年,当时Informix接管了Illustra并将Illustra集成到Informix中以创建IUS(Informix通用服务器)。哪个版本的Informix?哪个版本的Informix?