zoukankan      html  css  js  c++  java
  • 小议“外键”

    image

    上图是一幅很普通的外键关系示例,途中stu代表一个学生,category代表为学生建立的一个分类如:大学生、小学生、初中生。如果stu中的category_id不允许为空,那么在出入stu记录前必须保证此category_id 的存在,这个我想谁都没有问题。那么插入stu前该做哪些事情呢,必须知道当前的stu属于那个类别,如果category_id可以为恐则不需要这么做,换句话说插入stu记录中凡是有category_id的记录必须先做检查,如果此category不存在要先插入。

    这个时候另一个问题出来了,有的人说插入了category但是不知道它的id,因为id是由数据库自动维护的。其实这个根本不是问题,它是另一个问题的表象。因为id是用来标识一张表的,而实际上category的名字也是用来唯一标识,准确的说id是次要的。我们把上边这张表完全可以简化为一张表,也就是带category_title的stu表,如果只是一个字段那么冗余度没那么高,当字段多了,冗余度就非常高了,为了降低冗余度但又不破坏数据的关系,所以才有了上面两张表的格局,这个时候我们唯一冗余的就是一个32位的整型字段,忽略不计。当然有人提出了更好的、代替32位整型的数据类型作为id,在此我们不做累述。那么回到刚才的问题,插入了category后是不知道当前插入了记录的id(如果你说按时间查询,首先这很蠢,而且没道理,我相信大部分人不会这么干,比如有很多并发请求的时候可能查询出的是别人的记录。),但是有stu的记录,根据stu查出它的类型,然后存储,说的详细点,也就是说出这个问题的人是在设计上出现了问题。

    作者:KKcat
        
    个人博客:http://jinzhao.me/
        
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    理解python可变类型vs不可变类型,深拷贝vs浅拷贝
    在centos上安装mysql5.7的三种方法
    使用python脚本实现基于指定字符串的文本排序
    在CentOS 7上安装Python3.5源码包
    SVN入门使用
    Linux-vim命令
    在博客园里使用百度统计
    个人网站类型的运维
    apache解析多个域名
    使用php来访问操作sql server
  • 原文地址:https://www.cnblogs.com/jinzhao/p/1351983.html
Copyright © 2011-2022 走看看