zoukankan      html  css  js  c++  java
  • 数据库设计

    数据库设计
    1.软件开发的流程:
    立项=>需求分析=>概要设计(数据库设计)=>详细设计=>开发实现=>测试=>交付实施=>运维
                                
    2.数据库设计的基本流程:
        根据业务的需求找出相应的实体类,然后把这些实体类映射成数据库对象(表),再考虑实体的属性,也就是表格的列,最后考虑实体之间的关系,也就是表格之间的关系。

        a.数据设计画图
        
            数据库设计常用的工具:
                1.sybase公司,powerDesigner,功能强大,收费
                2.ERWIN-Studio,功能比较强大,收费
                3.JUDE,日本开发的开源,免费
            E-R图(Entity-Relationshiop),实体关系映射图
                它的核心就是映射(mapping);【后面具体介绍】
                1.实体名,映射成表
                2.属性,映射成列名
                3.对象标识符,映射成主键约束
                4.实体关系,映射成表之间的关秀(外键约束)
                
                映射举例:
                        实体类                 表
                名字    user        列名:tbl_user
                属性    id            主键:id
                属性    name        列名:name
                属性    password    列名:password

            实体类之间的关系:
                一对一    映射成外键
                    例: 丈夫/妻子类
            
                一对多    映射成外键
                    例:顾客和订单        
                    
                多对多    拆分成2个一对多,再映射成外键
                    例:学生和课程
                    
                自关联    映射成外键
                    例:员工实体类
                    
            
            根据实体类设计表:    
            外键,引用自己表或者另外的表中的主键,从而产生关联。
            主键:特点非空唯一,映射实体中的对象标识,数据库中的通过主键来区分行记录。
            一对一:外键可写在任意表中,但是一般写在业务意义的从表中。
                例:book书类,bookinfo详细信息类,区分主表和从表
            
            一对多:外键写在表多的一方
            
            多对多:利用中间表,拆分成两个一对多
                优势:当你再增加一个属性,两边都不好写,可以在中间表中添加
                    例:添加分数90,发现学生表不知道哪门课程90,课程表不知谁90
                    分数:额外列
                    额外列:必须有对应的实体
            
                
            d.自关联:引用自身主键作为自己的外键,使表中行记录产生关联关系
                
                    
                    
            注意:
                1.外键一般出现在表多的地方,映射具有方向性
                2.实体类中没有外键的概念,数据库中才有外键的概念
            

    三大范式:
        数据库三大范式,也是数据库设计的准则
            是一种数据库设计思想,
            可以帮助数据设计人员,
            以一种非常好的思路和架构来设计数据库。
        
        1NF:原子性。也就是说表中任何一个列都是唯一的,不可再拆分的。
            如:
            多数国外项目中,R(id,name,age),其中name可以分为:first_name,last_name。
            所有此设计是不符合1NF的,应重新设计为:
            R(id,first_name,last_name,age)
            如:国内地址一栏,要分为省,市,区,详细地址
            
            注意:原子性也不是拆的越多越好,比如把年龄分成个位和十位,无意义
            
        2NF:在1NF的基础上,不存在非关键列部分依赖于关键列,也就是说所有非关键列部分都必须完全依赖于关键列。
            如:
            R(id,sname,cname,sore)
            值(1,张三,数学,90)
            由于以上不管是以哪一列作为关键列,都存在 其他 非关键列 部分依赖于 主关键列,
            所以此设计是不符合2NF,应该重新设计为:
            R1(sid,sname)存放学生信息的表
            R2(cid,cname)存放课程信息的表        
            R3(sid,cid,score)存放学生与课程考试成绩的中间表
            

            
            
                    
           3NF     :在2NF的基础上,不存在 非关键列传递函数 依赖于关键列,也就是说,所有的非关键列 都 必须 直接依赖于关键列
            如:
            如果A依赖于B,B依赖于C,我们就说A传递函数 依赖于C
            
            学生考入某所大学的信息表:
            R(sid,sname,uid,uname,uphone,address)
            
            如果以sid作为关键列,sname,uid是直接依赖于sid,
            但是uname,uphone,address这三列都是直接依赖于uid,
            所以此设计不符合3NF,应重新设计为:
            R1(sid,sname,uid)存放学生信息表
            R2(uid,uname,uphone,address)存放大学信息的表

  • 相关阅读:
    java核心技术卷上学习笔记
    个人作业——软件工程实践总结作业
    个人作业——软件产品案例分析
    软件工程作业-结对编程 2.0
    软件工程作业-结对编程 1.0
    软件工程作业2.0
    软件工程作业1.0
    《面向对象程序设计》c++第六次作业___calculator SE
    面向对象程序设计作业 6.1~6.4
    面向对象程序设计作业 5.1~5.5
  • 原文地址:https://www.cnblogs.com/w-xibao/p/7816430.html
Copyright © 2011-2022 走看看