2

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

它是这样的:

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

4

2 回答 2

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 无法识别。

于 2012-12-18T16:36:27.370 回答
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}
于 2012-12-18T16:29:10.903 回答