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)存放大学信息的表


  • 相关阅读:
    CodeForces 150E: Freezing with Style
    CodeForces 407E: k-d-sequence
    CodeForces 809E: Surprise me!
    CodeForces 1178G: The Awesomest Vertex
    LOJ 3158: 「NOI2019」序列
    LOJ 3160: 「NOI2019」斗主地
    LOJ 3159: 「NOI2019」弹跳
    LOJ 3156: 「NOI2019」回家路线
    【比赛游记】NOI2019打铁记
    LOJ 2085: 洛谷 P1587: bzoj 4652: 「NOI2016」循环之美
  • 原文地址:https://www.cnblogs.com/zhang12354/p/7827774.html
Copyright © 2011-2022 走看看