精华内容
下载资源
问答
  • 一、数据库和数据库管理系统 ...根据数据之间的关系,数据模型结构分为: (1)层次模型(只能简单表示关系层次) (2)网状模型(关系复杂,但是看起来乱) (3)关系模型(常用) 关系模型(重点) ...

    一、数据库和数据库管理系统

    引言:
    - 传统txt文件存储后,查询不方便,所以引入了数据库。
    - 数据库快是由其数据结构决定。

    这里写图片描述

    1,数据库(DataBase:DB)按照一定数据结构存储和管理数据的仓库;

    根据数据之间的关系,数据模型结构分为:
    • (1)层次模型(只能简单表示关系层次)
    • (2)网状模型(关系复杂,但是看起来乱)
    • (3)关系模型(常用)
    关系模型(重点)

    ==将复杂的关系,以简单的二元形式进行表示(即表格)。行叫记录,列叫字段。==

    2.数据分类

    (1)结构化数据:(09年之前)

    可以通过相同的结构来进行统一管理。

    (2)非结构化数据:

    不能通过相同的结构来进行统一管理。

    (3)半结构化数据:

    介于上述两者之间(html/xml)

    3.数据库分类

    (1)关系型数据库:操作结构化数据
    (2)非关系型数据库:非结构化

    4.数据库管理系统(DataBase Management System:DBMS)管理和操作数据库的软件。

    (A)关系型数据库管理系统(R:relationship RDBS)
    (a)Oracle:分布式关系型数据库管理系统
    • (Sun公司的,后被Oracle公司收购,很多大公司都会用,收费价格不菲,按CPU核数收费,每核十几万美元。):
    • 国企一般用Oracle数据库。
    (b) Mysql:开源免费的数据库。

    小。支持GPL(开源软件许可证),即修改后,还必须开源。支持千万级别的数据。

    (c)Sql server:中型的关系型数据管理系统(微软)
    (d)DB2:IBM的:针对中小型企业的数据库管理系统。
    (B)非关系型数据库管理系统(Nosql :not only sql)

    Redis Hbase mengdb neo4j

    二、Mysql

    • Mysql是一个关系型的收据库管理系统,Mysql由Mysql ab公司创立,后被sun公司收购,后又被Oracle公司收购。
    • Mysql内部通过分库分表形式管理数据。一个数据库管理系统可以管理多个数据库,一个数据库中可以存放多张表。

    (一)下载安装 :

    (A)下载:Oracle官网(B)Mysql官网
    (B)安装(服务器)

    (安装过程中需要查看服务的话: window_R调出命令提示符,然后输入 services.msc查看服务)

    安装目录下的重要文件
    C:\Program Files\MySQL\MySQL Server 5.7
       Mysql:
           Data:存放数据信息,一个目录对应一个数据库
           frm文件:存放数据信息
           MYD文件:存放数据信息
       my.ini :mysql的配置文件
    (C)客户端工具

    Navicat for Mysql软件:图形化界面软件。

    (二)通过cmd建立连接:

    (1)切换到mysql的dbms安装目录下的bin目录下:

    打开cmd,执行命令:cd C:\Program Files\MySQL\MySQL Server 5.7\bin

    (2)登陆:命令:mysql -uroot -p
    (3)使用:
    (A)数据库database:
    • (a)查看数据库
      mysql>show databases; (注意s和分号)
    - (B)表table
    • (a)进入mysql数据库/切换数据库 mysql>use mysql
    • (b)查看数据库中的表 mysql> show tables;
    • (c))查看表中所有的数据 mysql>select * from user;

    三、SQL(structured qurery language:结构化查询语言)

    • 数据库的标准化语言:实现数据库的访问和操作。
    • 对大小写不敏感
    • 使用分号作为结束标志

    (一)分类

    (A)DDL(Data defination language)数据定义语言。

    对数据库对象(数据库,表,试图,索引等)结构操作。
    创建creat/修改alter/销毁drop

    (B)DML(Data Management Language)数据操纵语言

    insert/delete/updata/select

    (C)DCL(Data Control language)数据控制语言

    授权(Grant)/取消授权(revoke)

    (D)TCL(Transform Control language):事务控制语言

    提交(Commit)/回滚(rollback)

    (二)DDL:数据定义语言

    例1创建数据库
    --创建数据库bd1804
    create database if not exists bd1804;
    --销毁数据库(很少用,尽量不用)
    drop database if exists bd1804;
    
    • 创建表
    --创建表
    --创建表结构时需要描述字段信息
    create table student (
        sid int,
        sname varchar(20),
        age int 
    );
    
    • 增加属性
    • 表的销毁
    • 表的清除
    (A)数据类型
    (a)整型数据

    这里写图片描述

    (b)浮点数
    • Float(m,n)m,总长度,n,小数位数
    • Double(m,n)
    • Decimal 16字节:精度最高,一般银行用。
    (c)字符串
    • Char(n):定常字符串
    • Varchar(n):可变字符串,最长n,n以内根据内容定长度
    • Test:长文本
    (d)日期类型
    • Date :年月日
    • Time :时分秒
    • Datatime:年月日时分秒(1000年到9999年)
    • Timestamp:时间戳1970年1月1日0时0分0秒到2037年
    • Year
    (e)其他类型
    • Blob:二进制数据(图片,视频,一般不会用。一般存图片等的路径)
    • Enume(‘male’.’femal’):枚举
    • Set(‘1’,’2’,’3’):集合
    • Json:jason类型
    例3:

    碰到与关键字重合的字时,颜色会变,用反单引号引起。只是颜色变了,名字还是不变。

    create table `user` (
        uid int,
        uname varchar(20),
        `password` varchar(20),
        birthday Date 
    );
    
    对表结构操作的全部例子
    create table student (
        sid int;
        sname varchar(20);
        age int
    );
    create table `user` (
        uid int,
        uname varchar(20),
        `password` varchar(20),
        birthday Date 
    );
    #-----修改表结构---alter---- 
    #--在Student表中追加性别属性
    alter table student add sex varchar(20);
    -- 在Student表中添加班级,添加到首位
    alter table student add cid int first;
    -- 添加到指定字段后面
    alter table student add birthday date after cid;
    -- 查看表结构
    desc student;
    
    -- 修改字段(名称,类型,长度,位置)
    -- 修改名称
    alter table student change age sage int ;
    -- 修改类型
    alter table student change sname sname varchar(50);
    //change 必须前面是原字段,后面是新字段。modify可以只修改要改的部分。
    alter table student modify sname varchar(20);
    alter table student change sname  sname varchar(20) after cid;
    alter table student modify sname varchar (20) after cid;
    -- 删除---
    alter table student drop sid;
    #修改表的名称
    rename table student  to stu;
    #清空表:把表的内容清空
    truncate table stu;
    desc stu;
    
    (B)对表内容的完整性约束
    (a)完整性:数据的准确性
    (b)完整性约束分类
    • 实体完整性(实体:记录(记录之间不能重复))
      • 主键约束:primary key 设置为主键的字段必须唯一且不能为空
      • 唯一约束:unique
      • 主键自增:
    • 域完整性
    • 引用完整性
    • 自定义完整性
    (1)添加主键约束例子
    -- 主键约束的添加(唯一不为空,一张表只能有一个主键,但是可以有联合主键)
     -- 主键选择:无意义字段(主键一般不修改,经常变化的字段和业务的字段不适合作为主键)
     -- 1、创建表的同时添加主键约束
     -- 1)字段声明添加primary key 
    create table student(
        sid int primary key,
        sname varchar(20),
        age int
    );
     -- 2)声明时不指定,声明完字段后,添加主键
     drop table student;
     create table student(
        sid int ,
        sname varchar(20),
        age int,
        primary key(sid)
    );
    -- 2.2)联合主键
    drop table student;
    create table student(
        sid int ,
        sname varchar(20),
        age int,
        primary key(sid,sname)
    );
    -- 2、已经有表了,添加约束(用的少,一般创建时就要设计好)
    drop table student;
    create table student(
        sid int ,
        sname varchar(20),
        age int
    );
     --                      约束       约束名称
    alter table student add CONSTRAINT pk_sid primary key(sid);
    
    (2)添加唯一性约束的例子
    alter table student add CONSTRAINT uq_card unique(card);
    (3)主键自增例子
    alter table student modify sid int primary key auto_increment;

    其他

    (一)几个概念
    • A 数据库管理系统软件安装目录
    • B 数据库连接目录:其他编程语言连接数据库jar包信息 connectorJ
    • C 客户端的工具的目录 Workbench
    • D 数据存放的目录 ProgramData

    (二)一般命令语法

    \命令选项参数
    举例1mysql
    • uroot
    举例2java
    • version
    展开全文
  • MySQL数据库对表的操作

    千次阅读 2018-06-08 01:54:36
    1.表的基本概念: 表示包含数据库中所有数据的数据库对象 表中的数据库对象包含列、索引和触发器 列(Columns):也称属性列 索引(Indexes):是指根据指定的数据库表列建立起来的顺序,提供了快速访问数据的...

    1.表的基本概念:

        表示包含数据库中所有数据的数据库对象

        表中的数据库对象包含列,索引和触发器

        Columns):也称属性列

        索引Indexes):是指根据指定的数据库表列建立起来的顺序,提供了快速访问数据的途径且可监督表的数据,使其索引所指向的列中的数据不重复

        触发器(Triggers):是指用户定义的事务命令的集合,当对一个表中的数据进行插入,更新或者删除时这组命令就是自动执行,可以用来确保数据的完整性和安全性

    2.创建表:

        CREATE TABLE table_name(

        属性名 数据类型,

        属性名 数据类型,

        .

        .

        属性名 数据类型

        );

        建议表名标识符为t_xxx或tab_xxx

        2.1注意事项:

            1,创建表之前需要选择数据库,否则报错:No database(选择数据库的语句:USE database_name)

            2、如果数据库中已经存在该表,则报错:Table 'table_name' already exists

    3.查看表结构:

        3.1查看表的定义:

            DESCRIBE table_name;

        3.2查看表结构的详细定义:

            SHOW CREATE TABLE table_name;

    4.删除表:

        DROP TABLE table_name;

    5.修改表:

        5.1修改表名:

            ALTER TABLE old_table_name RENAME [TO] new_table_name;(可以通过DESC查询是否修改成功)

        5.2增加字段:

            在表的最后一个位置增加字段:

            ALTER TABLE table_name ADD 属性名 属性类型;

            在表的第一个位置增加字段:

            ALTER TABLE table_name ADD 属性名 属性类型 FIRST;

            在表的指定字段之后增加字段:

            ALTER TABLE table_name ADD 属性名 属性类型 AFTER 属性名;

        5.3删除字段:

            ALTER TABLE table_name DROP 属性名;

        5.4修改字段:

            5.4.1修改字段的数据类型:

                    ALTER TABLE table_name MODIFY 属性名 数据类型;

            5.4.2修改字段的名字:

                    ALTER TABLE table_name CHANGE 旧属性名 新属性名 旧数据类型;

            5.4.3同时修改字段的名字和属性

                    ALTER TABLE table_name CHANGE 旧属性名 新属性名 新数据类型;

            5.4.4修改字段的顺序:

                    ALTER TABLE table_name MODIFY 属性名1 数据类型 FIRST|AFTER 属性名2;

    6.操作表的约束:

        针对表中的数据做一些完整性检查操作,通过表的约束完成

        完整性是指数据的准确性和一致性

        MySQL支持的完整性约束:

        完整性约束关键字                                                    含义

        NOT NULL                                                    约束字段的值不能为空

        DEFAULT                                                      设置字段的默认值

        UNIQUE KEY(UK)                                     约束字段的值唯一

        PRIMARY KEY(PK)                                    约束字段为表的主键,可以作为该表记录的唯一标识

        AUTO_INCREMENT                                      约束字段的值为自动增加

        FOREIGN KEY(FK)                                     约束字段为表的外键

        6.1约束可以分为两类:

            单列约束:即每个约束只约束一列数据;

            多列约束:即每个约束可以约束多列数据;

        6.2NOT NULL(NK):

            CREATE TABLE table_name(

                属性名 数据类型 NOT NULL,

            );

        6.3DEFAULT:

            CREATE TABLE table_name(

                属性名 数据类型 DEFAULT 默认值,

            );

        6.4UNIQUE:

            CREATE TABLE table_name(

                属性名 数据类型 UNIQUE L,

            );(如果插入重复报错:ERROR 1062 (23000):Duplicate entry 'c' for key 'dname')

            (如果想给字段dname上的UK约束设置一个名字,可以执行SQL语句CONSTRAINT)

            例如:

            CREATE TABLE t_dept(

                deptno INT,

                dname VARCHAR(20),

                loc VARCHAR(40),

                CONSTRAINT uk_dname UNIQUE(dname)

            );

        6.5PRIMARY KEY(PK)

            用该字段来唯一标识所有记录,便于数据库管理系统快速查找到表中的记录(分为单子段主键和多字段主键)

            6.5.1单子段主键:

                CREATE TABLE table_name(

                    属性名 数据类型 PRIMARY KEY,

                );

                (如果想给字段dname上的PK约束设置一个名字,可以执行SQL语句CONSTRAINT)

                例如:

                CREATE TABLE t_dept(

                    deptno INT,

                    dname VARCHAR(20),

                    loc VARCHAR(40),

                    CONSTRAINT pk_dname PRIMARY KEY(dname)

                );

            6.5.2多字段主键:

                CREATE TABLE table_name(

                    属性名 数据类型,

                    [CONSTRAINT约束名] PRIMARY KEY(属性名,属性名...)

                );

                (如果想给字段DNAME上的PK约束设置一个名字,可以执行SQL语句约束)

                例如:

                CREATE TABLE t_dept(

                    deptno INT,

                    dname VARCHAR(20),

                    loc VARCHAR(40),

                    CONSTRAINT pk_dname PRIMARY KEY(deptno,dname)

                );

        6.6AUTO_INCREMENT:

            一个数据库表中只能有一个字段使用该约束,该字段的数据类型必须是整数类型

            CREATE TABLE table_name(

                属性名 数据类型 AUTO_INCREMENT,

            );

        6.7FORIGN KEY(FK):

            外键保证两个多个表之间的参照完整性

            设置外键约束的两个表之间会具有父子关系,子表中的为外键

            CREATE TABLE table_name(

                属性名 数据类型,

                属性名 数据类型

                ......

                CONSTRAINT 外键约束名 FOREIGN KEY(属性名1)

                    REFERENCES 表名(属性2)

           );

    展开全文
  • (4)数据依赖F对关系模式的影响1️⃣ 数据冗余(Data redundancy)2️⃣ 更新异常(update anomalies )3️⃣ 插入异常(insertion anomalies )4️⃣ 删除异常( deletion anomalies)2.规范化---改造关系模式,解决插入...


    0.思维导图

    在这里插入图片描述

    1.为什么要学习关系数据库规范化理论?

    感性认识:

    • 当我们面对一个实际问题时,我们应该如何去建数据库,建表,库的结构,表的结构我们该如何组织,才能更好的解决问题。
    • 如何省内存,提高查询修改删除更新的效率?
    • 如何避免可能出现的隐患,如修改删除更新插入等异常?
    • 以上就是关系数据库规范化理论研究解决的问题,说白了就是告诉你如何才能设计出合适的库和表

    下面我们回顾几个概念和问题,以便更好地学习后面的关系数据库规范化理论

    (1)基本概念回顾

    • 关系:可简单的理解为二维表

    • 关系模式:即二维表的逻辑结构

    • 关系数据库:指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据,关系型数据库这一系列的行和列被称为表,一组表组成了数据库

    • 关系数据库的模式:即关系数据库的逻辑结构

    (2)关系模式的形式化定义

    • 这里我们回顾一下《数据库系统概论》中对二维表结构的定义

    关系模式由五部分组成,即它是一个五元组:
    R(U, D, DOM, F)
    R: 关系名,即表名
    U: 组成该关系的属性名集合
    D: 属性组U中属性所来自的域。数据的取值范围和类型
    DOM: 属性向域的映象集合
    F: 属性组U上的一组数据依赖。

    关系数据库规范化理论研究的就是R、F、U,之间的关系。
    因为D和DOM对研究表的设计关系不大,所以在学习关系数据库规范化理论时可以将五元组简化成三元组

    三元组:R(U, F)
    当且仅当U上的一个关系r满足F时,r称为关系模式 R(U, F)的一个关系

    (3)什么是数据依赖F?

    这里我们对F中的数据依赖进行简单解释,后面会详细叙述函数依赖多值依赖

    数据依赖一个关系内部属性与属性之间的一种约束关系。
    这种约束关系是通过属性间值的相等与否体现出来的数据间相关联系
    它是现实世界属性间相互联系的抽象,是数据内在的性质,是语义的体现。

    数据依赖分类:

    • 函数依赖(Functional Dependency,简记为FD)

    函数依赖极为普遍地存在于现实生活中。比如描述一个学生的关系,可以有学号(Sno)、姓名(Sname)、 系名(Sdept) 等几个属性。由于一个学号只对应一个学生,一个学生只在一一个系学习。因而当“学号”值确定之后,学生的姓名及所在系的值也就被唯一地确定了。属性间的这种依赖关系类似于数学中的函数y=f(x),自变量x确定之后,相应的函数值y也就唯一地确定 了。

    • 多值依赖(Multivalued Dependency,简记为MVD)
    • 其他

    (4)数据依赖F对关系模式的影响

    • 因为关系数据库规范化理论主要研究的是三元组R(U,F),U我们都好理解,最重要的是F,这里我们简单的了解一下F对关系模式,即表的逻辑结构的影响,让我们理性的认识为什么学习关系数据库规范化理论

    举个例子:

    [例1]建立一个描述学校教务的数据库,数据库涉及的对象有:
    学生的学号(Sno)、所在系(Sdept)、系主任姓名(Mname)、课程名(Cname)、成绩(Grade)

    这里我们用单一的关系模式Student来表示这些对象:
    Student <U、F>
    该关系的属性集合:
    U ={ Sno, Sdept, Mname, Cname, Grade }

    这里说明一下现实世界的事实语义,关于这些对象之间的联系:
    ①一个系有若干学生,但一个学生只属于一个系。
    ②一个系只有一名(正职)负责人。
    ③一个学生可以选修多门课程,每门课程有若干学生选修。
    ④每个学生学习每一一门课程有一个成绩。

    于是得到属性组U上的一组函数依赖F
    F={Sno- > Sdept, Sdept- >Mname, (Sno, Cno)- >Grade}
    (如图所示)

    在这里插入图片描述

    • 如果只考虑函数依赖这一种数据依赖, 可以得到一个描述学生的关系模式Student <U,F>。表6.1是某一时刻关系模式Student的一个实例,即数据表。
      在这里插入图片描述

    这个关系模式设计的并不好,存在以下问题:

    1️⃣ 数据冗余(Data redundancy)

    • 比如,每一个系的系主任姓名重复出现,重复次数与该系所有学生的所有课程成绩出现次数相同,如表6.1所示。这将浪费大量的存储空间。

    2️⃣ 更新异常(update anomalies )

    • 由于数据冗余,当更新数据库中的数据时,系统要付出很大的代价来维护数据库的完整性,否则会面临数据不一致的危险。 比如,某系更换系主任后,必须修改与该系学生有关的每一个元组。

    3️⃣ 插入异常(insertion anomalies )

    • 如果一个系刚成立,尚无学生,则无法把这个系及其系主任的信息存入数据库。

    4️⃣ 删除异常( deletion anomalies)

    • 如果某个系的学生全部毕业了,则在删除该系学生信息的同时,这个系及其系主任的信息也丢掉了。

    鉴于存在以上种种问题,可以得出这样的结论:

    • Student关系模式不是一个好的模式
    • “好”的模式:
      不会发生插入异常、删除异常、更新异常,数据冗余应尽可能少
    • 原因:由存在于模式中的某些数据依赖引起的
    • 解决方法:通过分解关系模式消除其中不合适 的数据依赖

    可以把这个单一模式分成3个关系模式:

    • S(Sno,Sdept,Sno → Sdept);
    • SC(Sno,Cno,Grade,(Sno,Cno) → Grade);
    • DEPT(Sdept,Mname,Sdept→ Mname)

    这三个模式都不会发生插入异常、删除异常的问题,数据的冗余也得到了控制。
    一个模式的数据依赖会有哪些不好的性质,如何改造一个不好的模式,这就是接下来2.规范化要讨论的内容。

    2.规范化—改造关系模式,解决插入异常、删除异常、更新异常和数据冗余问题。

    (1)规范化研究什么?

    • 规范化讨论如何根据属性间依赖情况来判定关系是否具有某些不合适的性质
    • 通常按属性间依赖情况来区分关系规范化程度第一范式、第二范式、第三范式和第四范式等
    • 用来改造关系模式,通过分解关系模式来消除其中不合适的数据依赖,以解决插入异常、删除异常、更新异常和数据冗余问题。

    接下来我们依次学习以下内容,来更好的掌握规范化理论,来更好的设计表的结构,设计关系模式。

    • 函数依赖
    • 范式
    • 2NF
    • 3NF
    • BCNF
    • 多值依赖
    • 4NF

    其中函数依赖、码是为了学习范式、1NF,2NF,3NF……打基础

    (2)函数依赖

    这里我们讨论数据依赖F中的函数依赖,分为以下几种类型:

    • 函数依赖
    • 平凡函数依赖与非平凡函数依赖
    • 完全函数依赖与部分函数依赖
    • 传递函数依赖

    ① 函数依赖

    在这里插入图片描述

    注意:函数依赖不是指关系模式R的某个或某些关系满足的约束条件,而是指R的一切关系均要满足的约束条件。

    以下是一个错误的例子:
    sno->sdept,sno应该唯一决定sdept
    在这里插入图片描述

    函数依赖和别的数据依赖样是语义范畴的概念,只能根据语义来确定一个函数依赖。
    例如,姓名→年龄这个函数依赖只有在该部门没有同名人的条件下成立。如果允许有同名人,则年龄就不再函数依赖于姓名了。

    ② 平凡函数依赖与非平凡函数依赖

    在这里插入图片描述
    在这里插入图片描述

    ③ 完全函数依赖与部分函数依赖

    在这里插入图片描述
    在这里插入图片描述

    ④ 传递函数依赖

    在这里插入图片描述
    在这里插入图片描述
    直接依赖这里我们举个例子:
    BH(sno,idCard,address)

    X:sno 学号
    Y:idCard 身份证号
    Z:address 住址
    X->Y,Y->X,X<->Y,Y->Z
    所以我们说Z直接依赖于X

    (3)码

    • 码是关系模式中的一个重要概念。在 码的定义中有关码的若干定义, 这里用函数依赖的概念来定义码。
    • 码唯一决定一个实体集

    ① 候选码、超码、主码

    在这里插入图片描述

    ② 主属性和非主属性

    主属性与非主属性

    • 包含在任何一个候选码中的属性 ,称为主属性(Prime attribute)
    • 不包含在任何码中的属性称为非主属性(Nonprime attribute)非码属性(Non-key attribute)

    举几个例子:

    [例2]
    关系模式S(Sno,Sdept,Sage),单个属性Sno是
    SC(Sno,Cno,Grade)中,(Sno,Cno)是

    [例3]
    关系模式R(P,W,A)
    P:演奏者 W:作品 A:听众
    一个演奏者可以演奏多个作品
    某一作品可被多个演奏者演奏
    听众可以欣赏不同演奏者的不同作品
    码为(P,W,A),即All-Key

    ③ 外部码

    在这里插入图片描述

    (4)范式

    • 范式是符合某一种级别的关系模式的集合
    • 关系数据库中的关系必须满足一定的要求。满足不同程度要求的为不同的范式。
    • 级别越高,表设计的越合理

    范式的种类:

    在这里插入图片描述
    各种范式之间存在联系:

    在这里插入图片描述

    • 某一关系模式R为第n范式,可简记为R∈nNF。
      一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化

    ① 1NF

    1NF的定义:

    • 如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF
    • 第一范式是对关系模式的最起码的要求。不满足第一范式的数据库模式不能称为关系数据库
    • 但是满足第一范式的关系模式并不一定是一个好的关系模式

    以下是一个满足1NF,但不是好的关系模式的例子:

    关系模式 S-L-C(Sno, Sdept, Sloc, Cno, Grade)
    Sloc为学生住处,假设每个系的学生住在同一个地方

    • 这个例子中存在函数依赖,不是一个好的关系模式

    在这里插入图片描述
    图形化表示:
    在这里插入图片描述
    S-L-C不是一个好的关系模式,一个关系模式 R不属于2NF,就会产生以下几个问题:

    • (1)插入异常。假若要插入一个学生Sno=S7, Sdept =PHY, Sloc =BLD2, 但该生还未选课,即这个学生无Cno,这样的元组就插不进S-L-C中。因为插入元组时必须给定码值,而这时码值的一部分 为空,因而学生的固有信息无法插入。
    • (2)删除异常。假定某个学生只选一门课,如S4就选了一门课C3,现在C3这门课他也不选了,那么C3这个数据项就要删除。而C3是主属性,删除了C3,整个元组就必须一起删除,使得S4的其他信息也被删除了,从而造成删除异常,即不应删除的信息也删除了。
    • (3)修改复杂。某个学生从数学系(MA)转到计算机科学系(CS),这本来只需修改此学生元组中的Sdept分量即可,但因为关系模式S-L-C中还含有系的住处Sloc属性,学生转系将同时改变住处,因而还必须修改元组中的Sloc分量。另外,如果这个学生选修了k门课,Sdept、 Sloc重复存储了k次,不仅存储冗余度大,而且必须无遗漏地修改k个元组中全部Sdept、Sloc 信息,造成修改的复杂化

    为什么会有这些问题呢?

    • 原因:
      Sdept、 Sloc部分函数依赖于码
    • 解决方法(也就是2NF的处理方法)
      S-L-C分解为两个关系模式,以消除这些部分函数依赖
      SC(Sno, Cno, Grade)
      S-L(Sno, Sdept, Sloc)
      在这里插入图片描述

    ② 2NF

    在这里插入图片描述

    • 采用投影分解法将一个1NF的关系分解为多个2NF的关系,可以在一定程度上减轻原1NF关系中存在的插入异常、删除异常、数据冗余度大、修改复杂等问题。

    • 将一个1NF关系分解为多个2NF的关系,并不能完全消除关系模式中的各种异常情况和数据冗余。所以又引入了3NF。

    ③ 3NF

    在这里插入图片描述
    这里我们对上面的2NF例子再次进行剖析:在这里插入图片描述
    在这里插入图片描述

    解决方法:

    • 采用投影分解法,把S-L分解为两个关系模式,以消除传递函数依赖
      S-D(Sno, Sdept)
      D-L(Sdept,Sloc)
    • S-D的码为Sno, D-L的码为Sdept。
    • 分解后的关系模式S-D与D-L中不再存在传递依赖

    在这里插入图片描述

    • 采用投影分解法将一个2NF的关系分解为多个3NF的关系,可以在一定程度上解决原2NF关系中存在的插入异常、删除异常、数据冗余度大、修改复杂等问题。

    • 将一个2NF关系分解为多个3NF的关系后,仍然不能完全消除关系模式中的各种异常情况和数据冗余。

    ④ BCNF

    BCNF ( Boyce Codd Normal Form)是由Boyce与Codd提出的,比上述的3NF又进了一步,通常认为BCNF是修正的第三范式,有时也称为扩充的第三范式。

    在这里插入图片描述

    在这里插入图片描述
    下面用几个例子说明属于3NF的关系模式有的属于BCNF,但有的不属于BCNF。

    [例5] 关系模式C(Cno,Cname,Pcno)
    C∈3NF
    C∈BCNF

    关系模式C(Cno, Cname, Peno), 它只有一个码Cno, 这里没有任何属性对Cno部分依赖或传递依赖,所以C∈3NF。同时C中Cno唯一的决定因素, 所以C ∈BCNF。

    [例6]关系模式S(Sno, Sname, Sdept, Sage)
    假定S有两个码Sno,Sname
    S∈3NF。
    S ∈ BCNF

    假定Sname也具有唯一性, 那么S就有两个码,这两个码都由单个属性组成,彼此不相交。其他属性不存在对码的传递依赖与部分依赖,所以S∈3NF。
    同时S中除Sno、Sname外没有其他决定因素,所以S也属于BCNF。

    [例7]关系模式SJP(S,J,P)
    SJP∈3NF,
    SJP∈BCNF

    [例6.7]关系模式SJP(S, J, P)中,S是学生,J表示课程,P表示名次。
    每一个学生选修每门课程的成绩有一定的名次,
    每门课程中每一名次只有一个 学生(即没有并列名次)。
    由语义可得到下面的函数依赖:
    (S,J)→P; (J,P)→S
    所以(S,J) 与(J,P)都可以作为候选码
    这两个码各由两个属性组成,而且它们是相交的。
    这个关系模式中显然没有属性对码传递依赖或部分依赖。
    所以SJP∈3NF,而且除(S,J)与(J,P)以外没有其他决定因素,所以SJP∈BCNF。

    [例8] 关系模式STJ(S, T, J)中,S表示学生,T表示教师,J表示课程。

    每一教师只教一门课,
    每门课有若干教师,
    某一学生选定某门课, 就对应一个固定的教师。
    由语义可得到如下的函数依赖。
    (S,J)→T,(S,T)-J, T→J
    函数依赖关系可以用如图表示
    在这里插入图片描述
    这里(S,J)、 (S,T)都是候选码
    STJ是3NF,因为没有任何非主属性对码传递依赖或部分依赖
    STJ不是BCNF关系因为T是决定因素,而T不包含码。

    如何解决才能让STJ是BCNF关系呢?

    ⑤ 3NF与BCNF的关系

    在这里插入图片描述

    • 3NF和BCNF是在函数依赖的条件下对模式分解所能达到的分离程度的测度。
    • 一个模式中的关系模式如果都属于BCNF,那么在函数依赖范畴内它已实现了彻底的分离,已消除了插入和删除的异常。
    • 3NF的“不彻底”性表现在可能存在主属性对码部分依赖传递依赖

    (5)多值依赖

    • 前面我们讲了数据依赖分为函数依赖和多值依赖,函数依赖在上面已经叙述了,这里我们再讨论多值依赖。

    用一个例子引入多值依赖:

    [例9] 学校中某一门课程由多个教师讲授,他们使用相同的一套参考书。每个教员可以讲授多门课程,每种参考书可以供多门课程使用。

    可以用一个非规范化的关系来表示教师T、课程C和参考书B之间的关系
    在这里插入图片描述
    把这张表变成一张规范化的二维表:
    在这里插入图片描述

    • 关系模型Teaching (C, T,B)的码是(C, T, B),即all-key,因而Teaching∈BCNF。

    • 但是当某一课程(如物理)增加一名讲课教师(如周英)时,必须插入多个(这里是三个)元组:
      (物理,周英,普通物理学),(物理,周英,光学原理),(物理,周英,物理习题集)。

    • 同样,某一门课(如数学)要去掉一本参考书(如微分方程),则必须删除多个(这里是两个)元组:
      (数学,李勇微分方程),(数学,张平微分方程)。

    • 可以看出对数据的增删改很不方便,数据的冗余也十分明显。

    • 仔细考察这类关系模式,发现它具有一种称之为多值依赖(Multi-Valued Dependency, MVD)的数据依赖。

    ① 多值依赖的定义

    在这里插入图片描述

    例如,在关系模式Teaching中,对于一个(物理,光学原理)有一组T值{李勇,王军},这组值仅仅决定于课程C上的值(物理)。
    也就是说对于另一个(物理,普通物理学),它对应的一组T值仍是{李勇,王军},尽管这时参考书B的值已经改变了。
    因此T多值依赖于C,即C→→T

    在这里插入图片描述

    在这里插入图片描述

    ② 平凡多值依赖和非平凡多值依赖

    在这里插入图片描述
    下面再举一个具有多值依赖的关系模式的例子。

    • 对于W的每一个值Wi, S有一个完整的集合与之对应而不问C取何值。所以W→→S(多值依赖)。
      在这里插入图片描述

    如果用图下图来表示这种对应
    在这里插入图片描述

    • 则对应W的某一个值Wi的全部S值记作{S}wi (表示此仓库工作的全部保管员)
    • 全部C值记作{C}wi (表示在此仓库中存放的所有商品)。
    • 应当有{S}wi中的每一个值和{C}wi中的每一个C值对应。
    • 于是{S}wi与{C}wi之间正好形成一个完全二分图,因而W→→S
    • 由于C与S的完全对称性,必然有W→→C成立。

    多值依赖具有以下性质:

    在这里插入图片描述

    ③ 多值依赖与函数依赖的区别

    在这里插入图片描述

    (6)4NF

    在这里插入图片描述在这里插入图片描述

    在这里插入图片描述

    (7)规范化小结—重点归纳步骤

    • 关系数据库的规范化理论是数据库逻辑设计的工具

    • 目的:尽量消除插入、删除异常,修改复杂,数据冗余

    • 基本思想:逐步消除数据依赖中不合适的部分
      实质:·概念的单一化·

    关系模式规范化的基本步骤:

    在这里插入图片描述

    参考:《数据库系统概论第五版》—王珊

    展开全文
  • mysql对表进行添加字段、添加索引和添加外键


    1.添加字段

    实例:

    alter table eshop_store add column address_id INT(11) DEFAULT NULL COMMENT '外键,system_address.id';

    2.添加索引

    普通默认索引,实例:

    alter table eshop_store add index fk_store_address(address_id);
    唯一索引,实例:

    ALTER TABLE `table_name` ADD UNIQUE ( `column` );
    全局索引,实例:

    ALTER TABLE `table_name` ADD FULLTEXT ( `column`);
    主索引,实例:

    ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` );

    3.添加外键

    语法(默认类型:RESTRICT):

    alter table 表名 add constraint FK_ID foreign key(你的外键字段名) REFERENCES 外表表名(对应的表的主键字段名) 
    [ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION}]
    [ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION}]

    实例:

    alter table eshop_store add constraint fk_store_address foreign key(address_id) REFERENCES system_address(id);

    区别:

     CASCADE    删除包含与已删除键值有参照关系的所有记录
     SET NULL   修改包含与已删除键值有参照关系的所有记录,使用NULL值替换(只能用于已标记为NOT NULL的字段)
     RESTRICT   拒绝删除要求,直到使用删除键值的辅助表被手工删除,并且没有参照时(这是默认设置,也是最安全的设置)
     NO ACTION  啥也不做




    展开全文
  • 通过建立一个第三个表存放两个表的主键 4)删除约束 ALTER TABLE 表名 DROP PRIMARY KEY | UNIQUE(column) |  CONSTRAINT cname  [CASCADE]  --CASCADE表示与其依赖的约束也被删除 5)启用禁用...
  • SQL的理解(对表的引用)

    千次阅读 2018-01-05 14:00:18
    如果我们从集合论(关系代数)的角度来看,一张数据库的表就是一组数据元的关系,而每个 SQL 语句会改变一种或数种关系,从而产生出新的数据元的关系(即产生新的表)。 我们学到了什么? 思考问题的时候从表的角度...
  • 知识点:数据库表的相关概念、创建数据库表的方法、设计数据库表、向数据库表中插入数据、建立不同数据库表之间的关系、删除数据库表。 1、数据表相关的一些概念 1.1 数据库里的数据是如何保存的? 数据库...
  • 出现这样的问题是由于你保存数据时数据库中已经有了相同的数据,而ACCESS中表建立的约束或者主键不允许出现重复的记录。因此会报错。
  • 数据库及数据库中表等数据库对象的建立实验(包括关系图、完整性、权限控制、视图、索引等内容)实验1 SQL Server的安装安装过程展示实验2 设计数据库、创建数据库和数据表实验5 视图实验6 完整性约束实验7 权限管理...
  • 关系模型中有3类完整性约束:域完整性、实体完整性、参照完整性。 1.域(列)完整性 也就是用户定义的表字段的完整性 ...简单来说就是对表字段的约束。 2.实体(行)完整性 实体完整性是对关系中的记录...
  • 掌握以界面方式和命令方式建立、修改表及对表的有关操作。 Visual FoxPro 6.0的数据库是一个完整的关系数据库,它由一个或多个相关的表、表属性及表间各种联系组成的。 用Visual FoxPro 6.0编写程序时也和其他程序...
  • 来提升请求响应的速度,提升用户体验数据是否需要清理的阀值判断通常当表的磁盘大小超过5GB,或对于OLTP系统(联机事务处理),表的记录超过3000万,都应考虑对表进行分区或者分表。除了上述阀值之外,还可以根据...
  • 对表进行操作  1.1 创建表 --使用 create table 语句创建表 语法: create table 表名(字段 数据类型 约束) 例如: create table Student( StudentId int , --学生编号 StudenName varchar(50) --学生...
  • 关系模式规范化

    千次阅读 2018-05-16 22:21:49
    关系模式:关系模式相当于一张二维表的框架,在这个框架下填入数据,称为关系模式的一个实例...•未经规范化的数据库一般都有下述缺点: 较大的数据冗余,数据一致性差,数据修改复杂,对表进行插入、删除、更新时会...
  • 关系数据库模型设计

    千次阅读 2020-05-19 17:13:17
    本文从现实世界-概念世界(信息世界)-机器世界(数据世界)逐级抽象,旨在以浅显易懂的语言描述关系数据库应该如何建模,最后用简单名了的描述给出关系模型的设计范式的含义。
  • 数据表建立依据与操作原理

    千次阅读 2010-08-24 20:04:00
    前三个用于建立数据表后三个则用于对表的操作。   在ER模型中,是要我们找到业务所涉及的实体,并找出各自的属性及实体间的联系。他们往往存在一对一、一对多、多对多的联系。而这种联系往往是靠实体中的...
  • Mysql哪些字段适合建立索引

    万次阅读 2020-06-26 21:34:19
    1 数据库建立索引常用的规则如下: 1、表的主键、外键必须有索引; 2、数据量超过300的表应该有索引; 3、经常与其他表进行连接的表,在连接字段上应该建立索引; 4、经常出现在Where子句中的字段,特别是大表的字段...
  • 关系模型中设计表时的约束条件

    千次阅读 2019-02-26 15:27:19
    关系模型中设计表时的约束条件 一、介绍 关系模型是目前最重要的也是应用最广泛的数据模型。简而言之,关系就是一张二维表,由行和列组成。关系模型将数据模型组织成表格的形式,这种表格在数学上称为关系 设计...
  • 顺序表的建立

    千次阅读 2018-07-24 14:29:02
    定义 实现 定义结构 定义操作 创建顺序表 初始化顺序表 ...集合:结构中的数据元素之间除了“同属于一个集合”的关系外,别无其他的关系。如:广义表。 线性结构:结构中的数据元素之间存在一个对...
  • 关系模式的规范化

    万次阅读 多人点赞 2016-09-29 13:27:42
    原文路径:...了解关系模式规范化的作用 掌握第一范式-重点 掌握第二范式-重点 掌握第三范式-重点 回顾关系
  • 索引是关系数据库中用于存放每一条记录的一种对象,主要目的是加快数据的读取速度和完整性检查。建立索引是一项技术性要求高的工作。一般在数据库设计阶段的与数据库结构一道考虑。应用系统的性能直接与索引的合理...
  • 在项目开发中往往会遇到两个实体对象之间存在多对多关系的情况,此时我们会维护两个实体对象表,一个关系表,用来存放两者之间的关系。比较典型的案例是学生表、课程表、学生课程关系表。在这种关系表中,我们可以...
  • 数据库建立索引的优缺点

    千次阅读 2019-04-01 14:21:34
    为什么要建立索引,即索引的优点: ① 建立索引的列可以保证行的唯一性,生成唯一的rowId ② 建立索引可以有效缩短数据的检索时间 ③ 建立索引可以加快表与表之间的连接 ④ 为用来排序或者是...
  • SQL怎样建立全文索引

    千次阅读 2013-08-13 23:59:19
    怎样建立全文索引  微软的SQL Server数据库是一个在中低端企业应用中占有广泛市场的关系型数据库系统,它以简单、方便、易用等特性深得众多软件开发人员和数据库管理人员的钟爱。但SQL Server 7.0以前的数据库系统...
  • 数据库建立索引常用的规则

    千次阅读 2019-08-01 19:04:11
    数据库建立索引常用的规则如下: 1、表的主键、外键必须有索引;  2、数据量...
  • 数据库索引是为了增加查询速度而对表字段附加的一种标识。见过很多人机械的理解索引的概念,认为增加索引只有好处没有坏处。 - 这里想把之前的索引学习笔记总结一下:   首先明白为什么索引会增加速度,DB在...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 36,002
精华内容 14,400
关键字:

对表建立关系