• 物理数据库设计


    一、说明问题

      其实这篇非常简单,因为大家都是用这个方法解决的,我决定用自己的语言来描述清楚这一个问题。

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

    二、反模式

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

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

      这样做的缺点如下:

      1、获取所有可选值有困难,假设我要做个下拉列表,让用户选择可供输入的姓氏,那么SQL语句就复杂了,你需要查询系统视图。

      2、添加可选值,假如我们要增加一个外国的姓氏。那么你需要修改CHECK约束或触发器。

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

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

    三、解决方案

      创建一张检查表,每一行包含允许姓氏出现的值,然后定义一个外键约束。

      这个你懂的,不再废话。

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

  • 相关阅读:
    插槽分发内容
    Java学习-sgg-day07-20200422-复习
    Java学习-sgg-day06-20200421-今天晚上在下载资料
    Java学习-sgg-day05-20200420
    Java学习之面向对象之总结-sgg-day04-20200419
    Java学习之Eclipse的使用-sgg-day04-20200419
    Java学习之面向对象-sgg-day04-20200419
    Java学习之面向对象-sgg-day03-20200418
    Java学习总结-前三天
    Java学习之-sgg-day03-20200418
  • 原文地址:https://www.cnblogs.com/kissdodog/p/3364000.html
Copyright © 2020-2023  润新知