在我查看的遗留代码中,我发现了一个数据模型,它创建了相关属性的布尔字段,其中只有一个预期为真。例如:
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)
);
这些数据建模模式是否有术语?
答案 0 :(得分:2)
您正在考虑database normalization。
但是,您可以通过实现CHECK
constraint来确保一致性,{{3}}只允许其中一个布尔字段在任何时候设置为true。