我有一张表,表示一个具有多个“状态”(已批准,已过期,趋势,真实)的对象。所有这些状态都是独立的,所以我不能只有一个状态字段,因为可以进行查询,所以你可以问:
select * from Objects WHERE approved is true, trending is true, expired is false;
我不确定是否有规范化这样的表格。另外,据我所知,使用这些字段的索引基本上是无用的。这种情况也适合吗?
谢谢!
答案 0 :(得分:5)
针对许多布尔状态列的参数不是由于空间甚至归一化本身。如果每列完全与键相关并且不包含值的汞合金,则将其标准化(第3次正常)。相反,问题在于列的布尔性质和它们缺乏扩展。例如,您向我们展示了一个名为approved
的列。它的批准日期和由谁批准的是什么?如果批准渠道扩展到包含更多状态而不仅仅是批准/未批准,例如initiated
,pending
,approved
和rejected
,会发生什么?批准状态的描述如何?今天可能Y/N
但明天您的客户可能需要Approved/Rejected
或Qui/Non
。
我不是建议你改变你的设计;布尔列有它们的位置。但是,在仔细考虑扩展和可扩展性之后,应该使用它们。