37 数据库设计三范式(重点内容:面试经常问)

37 数据库设计三范式(重点内容:面试经常问)
 
    什么是设计范式?
        设计表的依据,按照这个三范式设计的表不会出现数据冗余。
        
        三范式都是哪些?
            第一范式:任何一张表都应该有主键。并且每一个字段原子性不可再分。
            
            第二范式:建立在第一范式的基础之上,所有非主键字段完全依赖主键,不能产生部分依赖。
                
                ***** 多对多?三张表,关系表中有两个外键。
                
                t_student学生表
                sno(pk) sname
                -------------
                1        张三
                2        李四
                3        王五
                
                t_teacher 讲师表
                tno    (pk)    tname
                ----------------
                1            王老师
                2            张老师
                3            李老师
                
                t_student_teacher_relation 学生讲师关系表
                id(pk)        sno(fk)    tno(fk)
                ----------------------------
                1            1            3
                2            1            1
                3            2            2
                4            2            3
                5            3            1
                6            3            3
        
        第三范式:建立在第二范式的基础之上,所有非主键字段直接依赖主键,不能产生传递依赖。
            
             ***** 一对多?两张表,多的表加外键。
            
            班级 t_class
            cno(pk)    cname
            ---------------
            1            班级1
            2            班级2
            
            
            学生 t_student
            sno(pk)    sname    classno(fk)
            -----------------------------
            101            张1        1
            102            张2        1
            103            张3        2
            104            张4        2
            105            张5        2
            
        提醒:在实际的开发中,以满足客户的需求为主,有的时候会拿冗余换执行速度。
        
    一对一怎么设计?
    
        一对一设计有两种方案:主键共享
        
        t_user_login 用户登录表
        id(pk)        username        password
        ---------------------------------
        1            zs                123
        2            ls                456
        
        t_user_detail 用户详细信息表
        id(pk+fk)        realname     tel    ...
        -------------------------------
                        zs            1111
                        ls            2222
        
    
        一对一设计有两种方案:外键唯一
        
        t_user_login 用户登录表
        id(pk)        username        password
        ---------------------------------
        1            zs                123
        2            ls                456
        
        t_user_detail 用户详细信息表
        id(pk)        realname     tel    userid(fk+unique)...
        -------------------------------
        1            zs            1111    1
        2            ls            2222    2
posted @ 2020-09-09 17:26  xlwu丶lz  阅读(229)  评论(0编辑  收藏  举报