物理数据库设计 - 限定列的有效值

1、说明问题

  其实这篇很是简单,由于你们都是用这个方法解决的,我决定用本身的语言来描述清楚这一个问题。javascript

  假设,咱们有一个列,这个列只可以取某些有效值。好比一个用户表,咱们有一个姓氏列,咱们须要限定里面的值为中国的姓氏,好比:赵钱孙李周吴郑王冯陈褚卫蒋沈韩杨。html

2、反模式

  对于这个问题,其实只有初学者可能会用这个方法,就是使用CHECK约束或者触发器来限定列的值,好比:java

  CHECK (lastname IN ('','','','')); 

  这样作的缺点以下:git

  一、获取全部可选值有困难,假设我要作个下拉列表,让用户选择可供输入的姓氏,那么SQL语句就复杂了,你须要查询系统视图。数据库

  二、添加可选值,假如咱们要增长一个外国的姓氏。那么你须要修改CHECK约束或触发器。数据库设计

  三、删除可选值,假设从今天起又不支持外国姓氏了,可是数据库中又已经有了一个外国姓氏,你不得不保留这一个废弃值。但下拉列表框中又不能再让用户选,这下麻烦大了。post

  四、移植性差,CHECK,约束,触发器的语法在各类数据库不相同,移植难度大。this

3、解决方案

  建立一张检查表,每一行包含容许姓氏出现的值,而后定义一个外键约束。spa

  这个你懂的,再也不废话。设计

  除非,你很肯定这些值不会变时,你可使用CHECK约束或触发器等手段实现。例如性别:男,女。不然,仍是使用检查表的方式比较好。

 
 
 
0
0
 
(请您对文章作出评价)
 
« 上一篇: NHibernate 帮助类(单例实际运用)
» 下一篇: 物理数据库设计 - 文件是否应该存储在数据库中
相关文章
相关标签/搜索