我需要将列添加到表中,该表表示另一列中的值的来源。即它是已知起源的枚举值。
表示该值的最佳数据类型是什么?我应该使用整数还是字符串?我意识到最佳设计会将两列都存储在另一个表中,但目前还不可能。
另外,用一些固定值表示未知原点还是null会更好吗?
答案 0 :(得分:0)
“我意识到最好的设计会将两个列存储在另一个表中,但目前还不可能。”
如果无法创建查找表,则需要存储含义。因此,请选择符合其含义的数据类型。也就是说,如果您的枚举为“红色,琥珀色,绿色”,请选择varchar2(5)
。使用检查约束将其限制为有效输入。
如果使用整数,则需要将翻译存储在其他位置。数据的含义必须驻留在数据库中。
显然,您需要在填充列的任何UI中复制值列表。这是因为没有创建查找表而产生的技术债务。
“用一些固定值表示未知来源还是空更好?”
最好的选择是显式值'unknown'
或任何适合的值。下一个最佳选项是null:nulls很混乱并且可能使查询更难写,但是魔术值更糟,因为它们像真实数据一样工作,因此可能导致误导性结果。