我正在Postgres数据库中为一组游戏设计一个表格。每个游戏既可以由管理员维护,也可以没有管理员。如果游戏中有管理员,则会有一个admin_id
字段,其中包含管理员的ID。
如果游戏没有管理员,我首先想到的是admin_id
数据字段为NULL
。如果游戏确实有管理员,admin_id
将包含整数类型的用户ID。像这样:
admin_id
--------
15282 -- admin
9283 -- admin
NULL -- no admin
81234 -- admin
另一个替代方案是另一个布尔列,即has_admin
,由于显而易见的原因,这是真的和错误的:
has_admin | admin_id
----------|----------
true | 15282
true | 9283
false | NULL
true | 81234
我的问题是,has_admin
专栏是不必要的毛病?或者是否有正当理由将其保留在那里,例如,如果我经常查询数据库以查找游戏是否有管理员?
答案 0 :(得分:1)
嗯,布尔值实际上并不占用太多空间,所以这不会导致任何大小问题。 但是,拥有has_admin是很麻烦的,因为就像你说的那样:
if ($obj->admin_id){
// do stuff
}
与:
相同if ($obj->has_admin === true){
// do stuff
}
因为有必要经常检查你从数据库中得到什么
if ($obj->has_admin === true && $obj->admin_id){
// do stuff
}
这完全没用:)
希望这有帮助
答案 1 :(得分:1)
添加has_admin
是一种去规范化,因此您可能会引入异常,例如:
true | NULL
false | 9283
由于效率原因,有时需要执行此类操作,但在这种情况下,您可以轻松地将has_admin
导出为:
admin_id is not null
所以没有理由添加这样的属性