物理数据库设计 - 限定列的有效值
2015-07-17 17:16
225 查看
原文链接:https://www.geek-share.com/detail/2648124560.html
物理数据库设计 - 限定列的有效值
关注 - 28
粉丝 - 631 +加关注 0 0 (请您对文章做出评价) « 上一篇:NHibernate 帮助类(单例实际运用)
» 下一篇:物理数据库设计 - 文件是否应该存储在数据库中 posted on 2015-07-17 17:16 铭轩同学 阅读(...) 评论(...) 编辑 收藏
一、说明问题
其实这篇非常简单,因为大家都是用这个方法解决的,我决定用自己的语言来描述清楚这一个问题。
假设,我们有一个列,这个列只能够取某些有效值。比如一个用户表,我们有一个姓氏列,我们需要限定里面的值为中国的姓氏,比如:赵钱孙李周吴郑王冯陈褚卫蒋沈韩杨。
二、反模式
对于这个问题,其实只有初学者可能会用这个方法,就是使用CHECK约束或者触发器来限定列的值,比如:
CHECK (lastname IN ('赵','钱','孙','李'));
这样做的缺点如下:
1、获取所有可选值有困难,假设我要做个下拉列表,让用户选择可供输入的姓氏,那么SQL语句就复杂了,你需要查询系统视图。
2、添加可选值,假如我们要增加一个外国的姓氏。那么你需要修改CHECK约束或触发器。
3、删除可选值,假设从今天起又不支持外国姓氏了,但是数据库中又已经有了一个外国姓氏,你不得不保留这一个废弃值。但下拉列表框中又不能再让用户选,这下麻烦大了。
4、移植性差,CHECK,约束,触发器的语法在各种数据库不相同,移植难度大。
三、解决方案
创建一张检查表,每一行包含允许姓氏出现的值,然后定义一个外键约束。
这个你懂的,不再废话。
除非,你很确定这些值不会变时,你可以使用CHECK约束或触发器等手段实现。例如性别:男,女。否则,还是使用检查表的方式比较好。
分类: 数据库设计:SQL反模式笔记 绿色通道: 好文要顶 关注我 收藏该文与我联系 逆心关注 - 28
粉丝 - 631 +加关注 0 0 (请您对文章做出评价) « 上一篇:NHibernate 帮助类(单例实际运用)
» 下一篇:物理数据库设计 - 文件是否应该存储在数据库中 posted on 2015-07-17 17:16 铭轩同学 阅读(...) 评论(...) 编辑 收藏
转载于:https://www.geek-share.com/detail/2648124560.html
相关文章推荐
- 物理数据库设计 - 限定列的有效值
- 物理数据库设计 - 限定列的有效值
- [导入]数据库物理模型设计的其他模式之继承模式
- Atitit.数据库表的物理存储结构原理与架构设计与实践
- Sql Server系列:数据库物理模式设计
- 数据库设计之概念、逻辑、物理模型
- 物理数据库设计 - 读书笔记
- [导入]数据库物理模型设计的其他模式之自联结模式
- 物理数据库设计 - 理解浮点数
- Atitit.数据库表的物理存储结构原理与架构设计与实践
- 数据模型——从现实世界到信息世界——再到物理世界(设计数据库的整体思路)
- 数据库物理模型设计的其他模式之继承模式
- [导入]数据库物理模型设计的其他模式之单表模式
- 数据库的物理设计
- 关系型数据库表结构设计技巧 - 物理主键、悲观锁、乐观锁
- 数据库物理模型设计的其他模式之自联结模式
- MySQL 数据库设计 笔记与总结(3)物理设计
- 数据库设计---PowerDesigner(物理模型和概念模型)
- Sql Server系列:数据库物理模式设计
- 数据库物理模型设计的其他模式之自联结模式