我遇到了一个问题,我需要在我的数据库中为学生出勤每小时插入一个比特值(真/假)。每小时应该有一个值(真/假)。
直接选项是每次学生在场时为每个选项创建24列和输入值。但肯定这也是最糟糕的一个。
有人建议我使用二进制字段,一个字段可以包含所有这些值。
实际上mu gui有24个复选框,无论选中哪个复选框,其值都应该存储为1,所以当我下次打开screem时,这些复选框应该保持检查状态。
我正在使用sql server 2008和.net framework 4.0,如果有帮助的话。
由于
答案 0 :(得分:1)
没有必要惹恼[var]binary(n)
。由于您只需要24位,因此存储一个常规的,不可为空的int
。然后只需对代码进行位数学运算,即移位(<<
/ >>
)运算符和按位组合(&
,|
以及某些~
) 。不需要任何其他东西。因此,如果我们确定LSB是00:00,从右到左工作,那么出现在03:00和14:00-16:00(含)的人将具有值
(1 << 3) | (1 << 14) | (1 << 15) | (1 << 16) ==> 114696
如果你对比特数学不满意,那么:
你还说:
但肯定这也是最糟糕的一次。
以什么方式?它描述了您的场景,SQL-server将自动为您压缩多个bit
字段。这可能不是一个糟糕的选择。
答案 1 :(得分:0)
您可以使用BitArray类来操作int(和其他类型)的各个位。这可能会让您更容易使用二进制选项,但是我认为将数据库中的所有值存储起来并不是一个糟糕的选择。为什么您认为这是一个糟糕的选择?