存储位字段布尔指示符在数据库的1或2列中?

时间:2014-01-28 21:32:39

标签: sql-server database-design

我需要数据库中的以下bit字段/列:

IsInbound IsOutbound

现在,如果IsInboundfalse (0),则反之则完全正确,这意味着IsOutboundtrue (1)

显然,我可以在数据库中的表格中只使用任一标题创建一个列,并且能够根据true/false条件提取所需的信息。

然而,正确的设计方法是什么?我是否只是随意选择其中一个字段并知道相反的值表示true/false或者我是否应该明确并且在表上定义两个字段?多年来我一直都这样做,很好奇创建这些领域的正确设计模式是什么?

2 个答案:

答案 0 :(得分:2)

为此设计的正确方法是不要先考虑空间。

相反,请考虑价值观。您描述值的方式只有两种组合:

IsInbound      IsOutbound
    1              0
    0              1

两者都不能是0。两者都不能是1。换句话说,您不应该将它们存储在两个不同的列中。如果这样做,则需要向表中添加约束以确保值不同。呸!

如果你想要两个变量,那么存储IsInbound并添加一个计算列:

alter table t
    add IsOutbound as (IsInbound = 0);

答案 1 :(得分:1)

即使只是一个简单的位字段,只需一列就需要更少的空间。查询也会更简单,因为您只需要检查一个字段而不是两个字段。