数据库设计
    规律:三分技术,七分管理,十二分基础数据
    基本步骤:

    • 需求分析;
    • 概念结构分析;(概念模型 E-R图;数据字典)
    • 逻辑结构分析;(关系数据模型)
    • 物理结构分析;(存储安排;存取路径建立;存取方法选择)
    • 数据库实施;
    • 数据库运行和维护;

    E-R图
    image.png
    实体和联系的三种情况:

    1. 一对一联系:(1:1)
    2. 一对多联系:(1:n)
    3. 多对多联系:(m:n)

    数据冗余
    三大范式
    一、部分函数依赖
    设X,Y是关系R的两个属性集合,存在X→Y,若X’是X的真子集,存在X’→Y,则称Y部分函数依赖于X。
    例:AB->C , A->C , B->C ; 则C部分依赖于AB。

    二、完全函数依赖
    设X,Y是关系R的两个属性集合,X’是X的真子集,存在X→Y,但对每一个X’都有X’!→Y,则称Y完全函数依赖于X。
    例:AB->C , 但是A!->C,B!->C ; 则C完全依赖于AB.
    成绩依赖于学号和课程号两个字段的组合;但只知道学号无法确定成绩,同理只知道课程号也无法确定成绩;只有学号和课程号组合在一起才能标识哪个学生哪门课程的成绩;
    因此(学号,课程号)——>成绩 是“完全函数依赖”。
    三、传递函数依赖
    设X,Y,Z是关系R中互不相同的属性集合,存在X→Y(Y !→X),Y→Z,则称Z传递函数依赖于X。
    例:A->B , B->C 但是 C!->B , B!->A ;则C传递依赖于A
    班主任依赖于班级,与学号无关,与课程号也无关
    又因班级依赖于学号所以班主任间接依赖于学号
    因此,(学号,课程号)——->班主任是“传递函数依赖”
    四、范式
    1、第一范式(1NF):所有属性都是不可分的基本数据项,即表中的每个列都不可以再进行拆分。

    id name sex_code sex_desc contact
    001 张三 0 17835201234_山西省运城市xx村
    002 李四 0 17735204567_山西省吕梁市yy村
    003 王五 1 18835207890_山西省太原市zz村

    应该将联系方式(contact)这一列分为电话号(phone)和地址(address)两列,这样才符合第一范式。
    2、第二范式(2NF):满足第一范式,非主属性不存在部份依赖。
    (码是由单个属性构成的,则至少为2NF)

    stu_id kc_id score kc_name
    001 1011 85 高数3-1
    001 1022 79 计算机组成原理
    002 1011 59.9 高数3-1

    kc_name只依赖于kc_id,与stu_id没有依赖关系,它不完全依赖于主键,只依赖于主键的一部分,不符合2NF。
    3、第三范式(3NF): 满足第二范式,非主属性不存在传递依赖和部分依赖。

    id name sex_code sex_desc phone address
    001 张三 0 17835201234 山西省运城市xx村
    002 李四 0 17735204567 山西省吕梁市yy村
    003 王五 1 18835207890 山西省太原市zz村

    表中sex_desc依赖于sex_code,而sex_code依赖于id(主键),从而推出sex_desc依赖于id(主键);sex_desc不直接依赖于主键,而是通过依赖于非主键列而依赖于主键,属于传递依赖,不符合3NF。
    4、BC范式(BCNF) :满足3NF且不允许主键的一部分被另一部分或其它部分所决定(即满足3范式,并且主属性之间没有依赖关系)。