数据库布尔属性或FK定义表?

时间:2011-04-25 18:15:00

标签: database data-modeling

在我查看的遗留代码中,我发现了一个数据模型,它创建了相关属性的布尔字段,其中只有一个预期为真。例如:

create table MyTable (
   id int primary key not null,
   // more fields...
   has_x bool not null,
   has_y bool not null
);

这很愚蠢,因为如果两者都设置为true,它会允许可能不一致的数据。我试图向技术人员,非开发人员,用户解释,但不确定如何解释为什么在原始设计“有效”的情况下更改为与定义的1对多关系是合适的,如下所示

create table Attributes ( -- contains "x" and "y" records.
   id int primary key not null,
   name varchar(100) not null
);

create table MyTable (
   id int primary key not null,
   // more fields
   attribute_id int not null foreign key references Attributes(id)
);

这些数据建模模式是否有术语?

1 个答案:

答案 0 :(得分:2)

您正在考虑database normalization

但是,您可以通过实现CHECK constraint来确保一致性,{{3}}只允许其中一个布尔字段在任何时候设置为true。