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


  • 相关阅读:
    Longest Palindromic Substring
    PayPal MLSE job description
    Continuous Median
    Remove Duplicates From Linked List
    Valid IP Address
    Longest substring without duplication
    Largest range
    Subarray sort
    Multi String Search
    Suffix Trie Construction
  • 原文地址:https://www.cnblogs.com/zhang12354/p/7827774.html
Copyright © 2011-2022 走看看