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在各种数据库中的支持形式并不统一。

合理使用反模式:

  选项值几乎不变时,可以考虑使用。

解决方案:

  创建字典表。

 

字典表多了,也很头疼,不过总别反模式要好。

posted @ 2012-05-07 09:56  日暮乡关何处是  阅读(403)  评论(0编辑  收藏  举报