• 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
  • 相关阅读:
    《ASP.NET Core 6框架揭秘》读者支持
    [LeetCode] 1309. Decrypt String from Alphabet to Integer Mapping 解码字母到整数映射
    上周热点回顾(6.206.26)
    上周热点回顾(6.277.3)
    国运之争 功在当下
    springboot~starter包的制作
    springboot~MyBatisPlus中使用@TableField完成字段自动填充
    springboot~加快tomcat启动securerandom.source
    springboot~没有启动类项目的单元测试
    Linux恶意挖矿软件SkidMap分析——伪造CPU占用
  • 原文地址:https://www.cnblogs.com/xlwu/p/13640131.html
Copyright © 2020-2023  润新知