SQL反模式笔记10——限定列的有效值
目标:限定列的有效值,即字典库
反模式:
1、在列定义上指定可选值
create table Bugs(status varchar(20) check(status in('new','in progress','fixed')))。
2、使用触发器
还有使用域或者用户自定义类型(UDT)等方法。
缺点:
1、无法获取所有的值,无能用select distinct status from Bugs,因为可能有的status目前还没有存储。
维护不好的话,还有可能造成列表和数据库存储的值,不一致。
2、增加一个值,需要修改数据库定义或者触发器。
3、废弃或修改某个值,可能要修改大量的数据,风险很大也不合理。
4、可移植性差,check约束、域,或者UDT在各种数据库中的支持形式并不统一。
合理使用反模式:选项值几乎不变时,可以考虑使用。
解决方案:
创建字典表。
字典表多了,也很头疼,不过总别反模式要好。