精华内容
下载资源
问答
  • 70w网名数据库.zip

    2019-07-22 12:41:47
    70多w个昵称网名,非常实用,欢迎下载70多w个昵称网名
  • 100w网名数据库.zip

    2020-12-30 15:08:06
    100万个网名昵称大全 .xlsx 格式,有分类,需要其他格式可以到网站上转换下。
  • 70多w个昵称网名,非常实用,欢迎下载70多w个昵称网名
  • TXT格式,627055行,一行一个昵称,昵称为2-10个中文字符,不分男女类型,另外提供PHP版本随机读取昵称文件返回一个昵称。 不能下载或者损坏留言我补发
  • 70万优质网名可筛选,可以直接导入数据库
  • dedecms织梦5.7大型qq个性门户/qq非主流/qq网名个性签名/整站带数据!PHP+MYSQL,压缩包里有安装说明,会员下载使用即可! 
  • 数据库

    2018-08-06 09:17:55
    比如一个人的姓名是一个单值属性,而他的网名是多值属性。多值属性在ER图里用双线椭圆表示。 此外,还有导出属性(派生属性),它通过具有相互信赖的属性推导出来,比如一个学生的平均成绩。导出属性在ER图里用...

    转:http://blog.csdn.net/xmm1990/article/details/45317463

    第一章 基本知识

    数据和信息

    信息:关于现实世界事物存在方式和运动状态的反映。

    数据:通常指用符号记录下来的、可以识别的信息。

    数据处理和数据管理

    数据处理是指从某些已知的数据出发,推导加工出一些新的信息。

    数据管理是指数据的收集、整理、存储、维护、检索、传送等操作。这部分操作是数据处理业务的基本环节,而且是任何数据处理业务中必不可少的共有部分。

     

    数据库基本术语

    数据库(DB):长期存储在计算机内、有组织的、统一管理的相关数据的集合。

    数据库管理系统(DBMS):位于用户和操作系统之间的一层数据管理软件。

    数据库系统(DBS):实现有组织地、动态地存储大量关联数据、方便多用户访问的计算机硬件、软件和数据资源组成的系统。

    数据库技术:与数据库的结构、存储、设计、管理和使用的相关技术。

     

    数据存储方法的演化历史:磁盘、卡片和纸带发展到磁盘,同时磁盘容量出现飞速增长。

    数据库技术的发展经历了三个阶段:手工管理阶段、文件系统阶段和数据库阶段。

    手工管理阶段:在20世纪50年代以前,外存只有磁带、卡片和纸带,还没有直接存取设备,没有操作系统,没有管理数据的软件,也没有文件的概念。数据量少,由用户自己管理,且数据没有组织结构,是面向应用的,依赖于应用程序,不能独立存在。

    文件系统阶段:50年代后期到60年代中期,出现了磁鼓、磁盘等存储设备,于是数据被组织成独立的数据文件,这样数据以“文件”形式长期保存在外部存储器的磁盘上,系统通过文件名访问,对文件里的记录进行存取,并可对文件中的记录进行增删改。文件系统实现了记录的结构化,即给出了记录间各种数据的关系,使得数据的逻辑结构与物理结构有了区别。文件组织也已经多样化。数据不再属于某个特定的程序,可以重复使用。

    但文件从整体上看仍是无结构的,数据共享性、独立性差,数据之间联系弱,数据不一致,且有大量冗余,所以管理和维护的代价很大。

    数据库阶段:60年代后期,出现了数据库这样的数据管理技术。1968年IBM推出层次模型的IMS系统。1969年CODASYL组织发布了DBTG报告,总结了当时各种数据库,提出网状模型。可以说,层次数据库是数据库系统的先驱,而网状数据库则是数据库概念、方法、技术的奠基者。1970年IBM的E.F.Codd连续发表论文,提出关系模型,奠定了关系数据库的理论基础。

    数据库的特点有:采用数据模型表示复杂的数据结构;有较高的数据独立性;数据库系统为用户提供了方便的用户接口;数据库系统提供了数据库的并发控制、数据库的恢复、数据的完整性、数据安全性这四方面的数据控制功能。

    除了关系数据库,如今还有一些高级数据库,比如分布式数据库系统、对象数据库系统、网络数据库系统。

    分布式数据库通常使用位于不同的地点的较小的计算机系统,通过网络连接构成完整的、全局的大型数据库。每台计算机有DBMS的一份完整拷贝,且具有自己局部的数据库。

    对象数据库是用以对象形式表示信息的数据库。对象数据库的管理系统称为ODBMS或OODBMS。

    网络数据库由数据和资源共享这两种方式结合在一起而成,也称Web数据库。它以后台(远程)数据库为基础,加上一定的前台(本地计算机)程序,通过浏览器完成数据的存储、查询等操作。

     

    数据库系统的体系结构

    数据库系统的结构常采用三级模式结构:外模式、概念模式、内模式。

    概念模式简称为模式,它表示了对数据的全局逻辑级的抽象级别,是数据库中全部数据的整体逻辑结构的描述。它由若干个概念记录类型组成,还包含记录间联系、数据的完整性、安全性等要求。在实现中,它可以对应于所有的表格。

    内模式也称存储模式,表示了对数据的物理级的抽象级别。它是数据库中全体数据的内部表示或底层描述,是数据库最低一级的逻辑描述,它描述了数据在存储介质上的存储方式和物理结构,对应着实际存储在外存储介质上的数据库。它包括记录类型、索引、文件的组织等,用内模式描述语言来描述、定义。

    外模式也称子模式,表示了对数据的局部逻辑级的抽象级别。它对应于用户级,是用户与数据库系统的接口,是用户用到的那部分数据的描述。在实现中可以对应于视图。

    三级模式间存在二级映象:

    外模式/概念模式映象:局部逻辑级和全局逻辑级的一级映象,提供了逻辑独立性。这样在修改表格时,只需要相应修改映象,而用户程序不会受到影响。

    概念模式/内模式映象:全局逻辑级和物理级的一级映象,提供了物理独立性。这样在进行数据库迁移时,比如从MySQL到sqlserver,表格并不需要发生变化。

     

    DBMS用于管理数据库。应用程序向DBMS发送请求,DBMS则向DB发出底层指令。DB向DBMS返回数据(查询结果),DBMS对数据进行处理并返回给应用程序数据(处理结果)。

    DBMS的主要功能有:数据库的定义功能、数据库的操纵功能、数据库的保护功能(数据库的恢复、数据库的并发控制、数据完整性控制和数据安全性控制)、数据库的维护功能和数据字典(存放数据库的信息,其用途为描述数据,比如一个表的创建者信息,创建时间信息,所属表空间信息,用户访问权限信息等)。

     

    数据库系统的组成:数据库、硬件、软件(DBMS、OS、开发工具等)和数据库管理员。

    数据库系统的用户角色有:

    DBA(Database Administrator):是控制数据库整体结构的一组人员,负责DBS的正常运行,承担创建、监控和维护数据库的责任。它的职责有:定义模式定义内模式与用户的联络(包括定义外模式、应用程序的设计、提供技术培训等专业服务)、定义安全性规则和对用户访问的数据库进行授权定义完整性规则及监督数据库的运行数据的转储和恢复工作

    专业用户:使用专用的数据库查询语言操作数据的计算机工作者。

    应用程序员:使用主语言和DML语言(Data Manipulation Language,SQL的分类之一,包括:INSERT、UPDATE、DELETE。)编写应用程序的计算机工作者。

    终端用户:使用应用程序的非计算机人士。

     

    第二章 数据模型

    数据模型的概念

    能表示实体类型及实体间联系的模型称为“数据模型”。

    数据模型分为两类:概念数据模型、辑数据模型和物理数据模型。

     

    概念数据模型(Conceptual Data Model)贴近于现实世界,它独立于计算机系统,完全不涉及信息在计算机中的表示,只是用来描述某个特定组织所关心的信息结构。

    最常用的概念数据模型是E-R(Entity-Relationship)模型,即实体-联系模型。它的数据描述有:

    实体:客观存在,可以互相区别的事物。

    实体集:性质相同的同类实体的集合。

    属性:实体的特性。

    实体标识符。

    联系:实体之间的相互联系。

    ER模型可以用ER图来表示,它看起来如下:

    ER图有三个基本成分:矩形框,用于表示实体类型(考虑问题的对象);菱形框,用于表示联系类型;椭圆形框,用于表示实体和联系类型的属性,实体的主键属性里文字下方应该有下划线。从上图可以看到实体和联系都可以有属性。一般说来,ER图里实体都是名词,而联系都是动词。

    ER图的优点有:简单、容易理解,真实反映用户的需求;与计算机无关,用户容易接受。

    与一个联系有关的实体集个数被称为元数。一个联系可以是一元联系、二元联系或多元联系。上图展示的联系就是二元联系。根据实体参与的数量,二元联系又可分为一对一(1:1,乘客和座位)、一对多(1:N,车间和工人)和多对多(M:N,学生和课程)。上表中的联系上m和n表示多对多的关系。一元联系的一个例子是零件的组合关系,一个零件可以用若干子零件组成。

    属性的分类

    根据属性的可分性,属性有基本属性和复合属性。比如地址可以包含邮编、街道、门牌号,它是一个复合属性。

    根据属性的值的数量,属性有单值属性和多值属性。比如一个人的姓名是一个单值属性,而他的网名是多值属性。多值属性在ER图里用双线椭圆表示。

    此外,还有导出属性(派生属性),它通过具有相互信赖的属性推导出来,比如一个学生的平均成绩。导出属性在ER图里用虚线椭圆表示。

    注意属性的值可以是空值。

    存在依赖(Existence Dependency):如果实体x的存在依赖于实体y的存在,则称x存在依赖于y。y称作支配实体,而x称作从属实体(弱实体)。弱实体主键的一部分或全部从被依赖实体获得。如果y被删除,那么x也要被删除。从属实体的集合便称为弱实体集。弱实体在ER图里用双线矩形表示。比如某单位的职工子女信息,如果职工不在该单位了,其子女信息也没有意义了,所以职工子女信息是一个弱实体。

     

    逻辑数据模型(Logical Data Model)贴近于计算机上的实现,是用户从数据库看到的模型,是具体DBMS所支持的数据模型。此模型既要面向用户,又要面向系统,主要用于DBMS的实现。逻辑模型有层次模型、网状模型和关系模型。

    层次模型:用树形结构表示实体类型及实体间联系的数据模型,盛行于20世纪70年代。缺点是只能表示1:N的关系,且查询和操作很复杂。

    网状模型:用有向图表示实体类型及实体间联系的数据模型,盛行于70年代至80年代中期。它的特点是记录之间联系通过指针实现,M:N也容易实现,查询效率较高。缺点是数据结构复杂,编程复杂。

    关系模型:用二维表格表示实体集;用关键码而不是用指针导航数据。SQL语言是具有代表性的语言。

     

    物理数据模型(Physical Data Model)面向于计算机物理表示,描述了数据在存储介质上的组织结构,不仅和具体的DBMS有关,还与操作系统和硬件有关。每一种逻辑数据模型在实现时都有起对应的物理数据模型。DBMS为了保证其独立性与可移植性,大部分物理数据模型的实现工作由系统自动完成,而设计者只设计索引、聚集等特殊结构。

     

    ER模式的设计的过程为:设计局部ER模式、设计全局模式和全局ER模式的优化。

    局部ER模式设计基于需求分析的结果,1、确定局部结构范围;2、实体定义;3、联系定义;4、属性分配;5、查看是否还有待分析的局部结构,若有则跳到第2步,否则进入全局ER模式设计阶段。

    全局ER模式设计基于局部ER模式,1、确定公共实体类型;2、合并两个局部的ER模式;3、检查并消除冲突;4、重复第3步直到不再有冲突;5、检查是否还有未合并的局部ER模式,若有则跳到第2步,否则便完成了ER模式设计。

    全局ER模式的优化有:实体类型的合并(一般的可以把1:1联系的两个实体类型合并);冗余属性的消除;冗余联系的消除(通常利用规范化理论中的函数依赖的概念消除冗余联系)。

    在ER模式的设计过程中,常常要对ER模型进行种种变换。变换包括:分裂、合并和增加删除。

    实体的分裂有水平分裂和垂直分裂。水平分裂根据应用对象的不同,分成两个具有相同属性的实体,比如书店的书可以水平分裂成“有库存”和“无库存”两个实体,这样方便对两种实体进行不同的操作。垂直分裂根据属性的使用频率,分成两个属性不同的实体,比如图书有作者、版次、价格等属性,分成包含常用的作者、版次属性的图书和包含不常用的价格属性的图书。垂直分裂的好处是可以减少每次存取的数据量。

    联系的分裂可以细化联系,比如程序员和项目的联系“参与”,可以分裂成“开发”和“维护”。

    合并是分裂的逆过程。注意合并的联系类型只能是定义在相同的实体类型上的。

     

    ER模型向关系模型的转换规则

    实例类型的转换:将每个实体类型转换成一个关系模型,实体的属性即为关系模型的属性,实体的标识符即为关系模型的键。

    二元联系类型的转换:

    1:1联系:在由实体转换成的两个关系模式之间选任一个加上一个属性来表示另一个关系模式的键和联系。也就是结果只有两张表,其中一张表里会有外键表示联系。

    1:N联系:在N端实体转换成的关系模式里加上1端实体类型的键和联系类型和属性。最终的结果也是两个表,N端的表有外键。

    M:N联系:将联系类型转换成关系模式,其属性为两端实体类型的键加上联系类型的属性,而键为两端实体键的组合。最终的结果有三张表,其中一张表专门表示联系,包含另两个表的外键。

     

    第三章 关系数据库理论

    关系模型是用二维表格表示实体,用键码进行数据导航的数据模型。数据导航是指从已知数据查找未知数据的方法。在关系模型中,记录称为元组,为行(Row);字段称为属性,为列(Column)。

    超键(Super Key)是可以唯一标识元组的属性集。候选键(Candicate Key)是不含多余属性的超键。主键(Primary Key)是用户选做元组标识的候选键。外键(Foreign Key)是当模式R中的属性K是其它模式的主键,那么K在R中称为键。

    举个例子,屏幕上的点的信息表

    x坐标 y坐标 颜色 大小

    假定每个位置上的点是唯一的,但颜色和大小不唯一,那么首先属性集(x坐标、y坐标、颜色、大小)可以唯一标识记录,它便是一个超键。同理,属性集(x坐标、y坐标、大小)也是表的一个超键。然而可以发现,这两个超键有多余的属性,真正起到标识作用的是(x坐标、y坐标),而它没有多余的属性,因为(x坐标)或(y坐标)不能单独用来标识一个点,所以它是一个候选键。它是这个表里唯一的候选键,用户可以选择用它作为主键来标识元组。如果我们假定颜色也是唯一的,那么表格里有两个候选键:(x坐标、y坐标)和(颜色),而用户可以任选其一作为主键。

     

    如果主键出现在别的表中,比如一个“射线”表

    x坐标 y坐标 方向

    那么(x坐标,y坐标)在“射线”表里就是一个外键

     

     

    关系是一个属性集相同的元组的集合。由于是集合,因此:

    1、关系中没有重复的元组;

    2、关系中的元组是无序的,即没有行序;(理论上属性集也是无序的,但使用时习惯考虑列的顺序)。

    每个属性都是不可分解的整体,比如只能是整型、字符这种简单类型,而不能是结构体这样的复杂的类型。

    根据元组的数目,关系可分为有限关系和无限关系。

     

    关系模式有三类完整性规则:

    1、实体完整性规则,即主键的值不能是空值;

    2、参照完整性规则,即不允许(通过外键)引用不存在的实体;

    3、用户定义的完整性规则,比如属性“性别”只能接受“男”和“女”作为合法值,其它的输入都是非法的。

    关于参照完整性,当在一个参照关系里作为删除记录时,有三种策略:
    1、级联删除:将参照关系中所有外键值与被参照关系中要删除的元组的主键值相同的元组一起删除;

    2、受限删除:仅当参数关系中没有外键与被参照关系中要删除的元组主键值相同时才允许删除,否则拒绝删除操作;

    3、置空值删除:删除被参照关系中的元组,并将参照关系中相应的外键值置空值。

    而向参照关系插入元组时,有两种策略:

    1、受限插入:仅当被参照关系存在相应的元组,且其主键和要插入的元组的外键值相同时才允许插入,否则拒绝插入操作;

    2、递归插入:首先在被参照关系里插入主键值等于参照关系里要插入的元组的外键值相同的元组,再在参照关系里插入元组。

    关于实体完整性,主键的修改操作有两种方法:一种是不允许修改主键;另一种是允许修改主键,但必须保证修改后的主键唯一且非空。当修改的主键是参照关系的外键时,可以使用三种策略:级联修改、受限修改和置空值删除。

     

    关系代数的运算有多种。

    五个基本操作:并(Union,∪)、差(set difference,−)、笛卡儿积(Cartesian product,×)、投影(Projection,Π)和选择(Selection,σ);

    四个组合操作:交(Intersection,∩)、θ连接(θ-Join,θ)、自然连接(Natural join,⋈)和除法(Division,÷);

    七个扩充操作:改名(Rename,ρ)、广义投影、赋值(←)、外连接(Outer joins,⟕⟖⟗)、外部并、半连接(Semijoin,⋉ ⋊)、聚集操作(Aggregation)。

     

    选择运算:从关系中选择满足给定条件的元组。比如σA<5(R)在关系R中选择属性A的值小于5的元组。

    投影运算:从关系中取出若干列组成新的关系,投影结果里要删除重复的元组。比如ΠA,B(R)从关系R中取出属性集(A、B)。

    举个例子,有学生信息表S1

    学号 姓名 电话
    1 X 123
    2 Y 456
    3 Z 789

    得到姓名为Y的学生的电话:Π电话(σ姓名=Y(R))。

     

     

    并运算:合并两个关系,即元组合并。这两个关系必须是同构的,即属性集应该相同。

    例如有另一种学生信息表S2

    学号 姓名 电话
    3 Z 789
    4 M 999


    S1∪S2的结果为:

    学号 姓名 电话
    1 X 123
    2 Y 456
    3 Z 789
    4 M 999

    注意并运算时要删除重复的元组。

     

     

    交运算:得到同时出现在两个关系的元组集合。

    例如,
    S1∩S2的结果为:

    学号 姓名 电话
    3 Z 789

     

     

    差运算:得到出现在一个关系而不在另一个关系的元组集合。

    例如:
    S1−S2的结果为:

    学号 姓名 电话
    1 X 123
    2 Y 456

     

    换句话说,(S1−S2)∩S2=∅,而(S1−S2)∪S1=S1。

     

    笛卡儿乘积运算:把一个关系中的每个元组和另一个关系的所有元组连接成新关系中的一个元组。新关系的元组数是两个关系的元组数之积。

    比如有一张选课表SC1

    学号 课程
    1 语文
    2 数学

     

     

    那么S1×SC1的结果为:

    学号 姓名 电话 学号 成绩
    1 X 123 1 语文
    1 X 123 2 数学
    2 Y 456 1 语文
    2 Y 456 2 数学
    3 Z 789 1 语文
    3 Z 789 2 数学

     

    运算中的查询优化:尽可能早地执行选择操作和投影操作;避免直接做笛卡儿乘积,把笛卡儿乘积之前和之后的一连串操作和投影合并起来做。

     

    除运算:它类似于(但不完全是)笛卡儿乘积的逆运算,被除关系的属性集(M,N)真包含除关系的属性集(N),得到的结果关系的属性集为被除关系的属性集与除关系的属性集的差集(M),且结果关系是与除关系的笛卡儿乘积被包含于被除关系的最大关系。换句话说,若R1(M,N)÷ R2(N) = R3(M),则R3(M) × R2(N) ⊆ R1(M,N),而在ΠM(R1)−R3里,没有任何子集能足这样的关系。

    举个例子,有选课表SC2

    学号 课程
    1 语文
    2 数学
    1 数学

    和课程表C2

    课程
    语文
    数学

     

    那么SC2 ÷ C2的结果为:

     

    学号
    1

     

    结果其实为选修了所有课程的学生号。

    除运算的另一种形式表达为:r ÷ s = ΠR-S(r) -ΠR-S((ΠR-S(r) × s) - ΠR-S,S(r)) (小写r、s为关系名,而大写R、S分别为r、s的属性集)。

     

    更名运算ρx(E)可以返回关系表达式的结果,并重命名这个表达式为x。ρx(A1,A2,...,An)(E)同时将各属性更名为A1、A2……,An。例如数学成绩比王红同学高的学生:ΠS.姓名(σR.成绩<S.成绩 ∧ R.课程=数学 ∧ S.课程=数学 ^ R.姓名=王红(R ×ρS(R))。其实更名运算就是SQL里的as。

     

    θ连接:从两个关系的广义笛卡儿积中选取给属性间满足一定条件的元组通常写法为:

    R⋈S
    A θ B

     

    A、B分别为R和S上可比的属性列。θ为算术比较符,如果是等号则称为等值连接。例如数学成绩比王红同学高的学生的另一种表示方式可以是:

    ΠS.姓名((σ课程=数学 ∧ 姓名=王红(R)) σ课程=数学ρS(R)
    R.成绩 < S.成绩

     

     

    自然连接:从两个关系的广义笛卡儿积中选取在相同属性列上取值相等的元组,并去掉重复的列。比如前面的S1表和SC1表的自然连接的结果为:

    学号 姓名 电话 成绩
    1 X 123 语文
    2 Y 456 数学

     

     

    赋值运算:用于存储临时变量,比如r ÷ s的过程可写成:

    temp1  ΠR-S(r)

    temp2 ΠR-S(tmp1 × s) - ΠR-S,S(r))

    result temp1 - temp2

     

    广义投影:在投影列表中使用算术表达式来对投影进行扩展:ΠF1, F2, ..., Fn(E),其中F1,F2,...Fn是算术表达式。比如:ΠA*5, B+3(R)。

     

    外连接:为避免自然连接时因失配而发生的信息丢失,可以假定往参与连接的一方表中附加一个取值全为空值的行,它和参与连接的另一方表中的任何一个未匹配上的元组都能匹配,称之为外连接。

    外连接 = 自然连接 + 未匹配元组

    外连接的形式有:左外连接右外连接全外连接

    左外连接 = 自然连接 + 左侧表中未匹配元组

    右外连接 = 自然连接 + 右侧表中未匹配元组

    全外连接 = 自然连接 + 两侧表中未匹配元组

    考虑两张表“学生借书信息”(R)

     

    学号 书名 借出时间
    1 数据库 2012.1.2
    5 设计模式 2012.3.6
    8 操作系统 2012.4.8

     

    和“学生会信息”(S):

     

    学号 学生会
    1 科技部
    3 体育部

     

    自然连接:R⋈S:

    学号 书名 借出时间 学生会
    1 数据库 2012.1.2 科技部

     

    左外连接:R⟕S

    学号 书名 借出时间 学生会
    1 数据库 2012.1.2 科技部
    5 设计模式 2012.3.6 null
    8 操作系统 2012.4.8 null

    右外连接:R⟖S

    学号 书名 借出时间 学生会
    1 数据库 2012.1.2 科技部
    3 null null

    体育部

    全外连接:R⟗S

     

    学号 书名 借出时间 学生会
    1 数据库 2012.1.2 科技部
    3 null null 体育部
    5 设计模式 2012.3.6 null
    8 操作系统 2012.4.8 null

     

     

    半连接:类似于自然连接,但R ⋉ S 的连接的结果只是在 S 中有在公共属性名字上相等的元组所有的R 中的元组,而R⋊S刚好相反。

    还是以前面的“学生借书信息”和“学生会信息”为例:

    R ⋉ S

    学号 书名 借出时间
    1 数据库 2012.1.2

     

    R⋊S:

    学号 学生会
    1 科技部

     

    聚集函数:求一组值的统计信息,返回单一值。使用聚集的集合可以是多重集,即一个值可以重复出现多次。如果想去除重复值,可以用连接符“-”将“distinct”附加在聚集函数 名后,如sum-distinct。

    聚集函数包括:

    sum:求和。例如求001号学生的总成绩:sumscore(σs#=001(SC))

    avg:求平均数。

    count:计数。

    max:求最大值。

    min:求最小值。

    聚集函数可以使用分组,将一个元组集合分为若干个组,在每个分组上使用聚集函数。它的形式是:属性下标G聚集函数属性下标(关系)。例如

    “学号G avg分数(成绩表)”得到每个学生的平均成绩。

    分组运算G的一般形式是:G1,G2,...,GnGF1(A1),F2(A2),...,Fm(Am)(E)。在关系表达式E里,所有在G1,G2,...,Gn上相等的元组分成一组,分别在属性A1上执行F1,属性A2上执行F2,…,属性Am上执行Fm。

     

    第四章 结构化查询语言

    SQL可以分为两类:数据操作语言(Data Manipulation Language,DML)和数据定义语言(Data Definition Language,DDL)。

    DML由查询和更新命令组成:

    • SELECT:从数据库中取出数据。
    • UPDATE:更新数据库的数据。
    • DELETE:从数据库中删除数据。
    • INSERT INTO:向数据库插入新数据。

    DDL创建和删除数据库、创建和删除表、定义索引(关键字)、指定表之间的联系、定义表之间的约束。SQL里最重要的DDL的语句有:

    • CREATE DATABASE:创建一个新的数据库
    • ALTER DATABASE:修改一个数据库。
    • CREATE TABLE :创建一张新的表。
    • ALTER TABLE :修改一张表。
    • DROP TABLE :删除一张表。
    • CREATE INDEX :创建一个索引。
    • DROP INDEX :删除一个索引。

    用SELECT进行查询时,可以会有重复的记录。使用DISTINCT语句可以消除重复数据。比如:select distinct name from persons。使用WHERE可以指定查询的目标,比如:select * from persons where age >= 18。

    WHERE 子句里允许的操作符有:

    Operator Description
    = Equal
    <> Not equal
    > Greater than
    < Less than
    >= Greater than or equal
    <= Less than or equal
    BETWEEN Between an inclusive range
    LIKE Search for a pattern
    IN To specify multiple possible values for a column

    Note: In some versions of SQL the <> operator may be written as !=

     

    IN的语法是

    SELECT column_name(s)
    FROM table_name
    WHERE column_name IN (value1,value2,...)

     

    BETWEEN的语法是:

    SELECT column_name(s)
    FROM table_name
    WHERE column_name
    BETWEEN value1 AND value2

     

    在对字符串比较时,需要用单引号包围字符串常量(多数据数据库系统也接受双引号),数值不应该使用绰号。

    LIKE比较时可以使用的通配符有:

    Wildcard Description
    % A substitute for zero or more characters
    _ A substitute for exactly one character
    [charlist] Any single character in charlist
    [^charlist]

    or

    [!charlist]

    Any single character not in charlist

     

    在进行条件判断时,可以使用AND和OR来连接逻辑表达式。

     

    可以使用ORDER BY对查询的结果进行排序,它的语法为

    SELECT column_name(s)

    FROM table_name

    ORDER BY column_name(s) ASC|DESC

     

    mysql里,可以使用LIMIT子句来定义查询结果的最大数量。 比如:select * from persons order by age limit 1。会看到年纪最小的人。在SQL Server里等价的语句是

    SELECT TOP number|percent column_name(s)
    FROM table_name

    注意limit和top都不是SQL标准。

     

     

    INSERT用来插入数据,语法为:

    INSERT INTO table_name
    VALUES (value1, value2, value3,...)

    The second form specifies both the column names and the values to be inserted:

    INSERT INTO table_name (column1, column2, column3,...)
    VALUES (value1, value2, value3,...)

     

    UPDATE更新数据,语法为:

    UPDATE table_name
    SET column1=value, column2=value2,...
    WHERE some_column=some_value
     

    DELETE删除表示的行,语法为:

    DELETE FROM table_name
    WHERE some_column=some_value

     

    AS可以为表起别名:

    SELECT column_name(s)
    FROM table_name
    AS alias_name

     

    SQL里的连接

    • JOIN:自然连接;
    • LEFT JOIN:左外连接;
    • RIGHT JOIN:右外连接;
    • FULL JOIN:全外连接。

    INNER JOIN 语法

    SELECT column_name(s)
    FROM table_name1
    INNER JOIN table_name2
    ON table_name1.column_name=table_name2.column_name

    LEFT JOIN 语法

    SELECT column_name(s)
    FROM table_name1
    LEFT JOIN table_name2
    ON table_name1.column_name=table_name2.column_name

     

    RIGHT JOIN 语法

    SELECT column_name(s)
    FROM table_name1
    RIGHT JOIN table_name2
    ON table_name1.column_name=table_name2.column_name
     

    FULL JOIN 语法

    SELECT column_name(s)
    FROM table_name1
    FULL JOIN table_name2
    ON table_name1.column_name=table_name2.column_name
     

    UNION 求并集,语法为:

    SELECT column_name(s) FROM table_name1
    UNION
    SELECT column_name(s) FROM table_name2

    Note: The UNION operator selects only distinct values by default. To allow duplicate values, use UNION ALL.

    UNION ALL保留重复的记录

    SELECT column_name(s) FROM table_name1
    UNION ALL
    SELECT column_name(s) FROM table_name2
     

    SELECT INTO 可以把查询结果写入一张表里

    We can select all columns into the new table:

    SELECT *
    INTO new_table_name [IN externaldatabase]
    FROM old_tablename

    Or we can select only the columns we want into the new table:

    SELECT column_name(s)
    INTO new_table_name [IN externaldatabase]
    FROM old_tablename


     

    CREATE DATABASE 语法

    CREATE DATABASE database_name


     

    CREATE TABLE 语法

    CREATE TABLE table_name
    (
    column_name1 data_type,
    column_name2 data_type,
    column_name3 data_type,
    ....
    )


     

    SQL约束

    约束限定可以插入表的数据的类型。它可以在表创建(CREATE TABLE)时指定,也可以在表创建手(用ALTER TABLE)指定。常用的约束有:

    • NOT NULL
    • UNIQUE
    • PRIMARY KEY
    • FOREIGN KEY
    • CHECK
    • DEFAULT

     

    NOT NULL约束强制某一列不接受NULL值。比如:

    CREATE TABLE Persons
    (
    P_Id int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255)
    )

     

    UNIQUE约束保证某列没有重复记录。在mysql中可以在创建表时有两种方法指定:

    CREATE TABLE Persons
    (
    P_Id int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255),
    UNIQUE (P_Id)
    )


    或:

    CREATE TABLE Persons
    (
    P_Id int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255),
    CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)
    )

    注意第二种方式可以同时指定多列,只有在这些列上都相等的记录才视为重复。
     

    表创建后加入UNIQUE约束的方法是:

    ALTER TABLE Persons
    ADD UNIQUE (P_Id)

    ALTER TABLE Persons
    ADD CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)

     

    注意:如果该列中已经有重复的记录,那么加入约束会失败
     

    删除UNIQUE约束

    ALTER TABLE Persons
    DROP INDEX uc_PersonID


     

    创建PRIMARY KEY约束:

    CREATE TABLE Persons
    (
    P_Id int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255),
    PRIMARY KEY (P_Id)
    )
     

    修改表来加入PRIMARY KEY约束:

    ALTER TABLE Persons
    ADD PRIMARY KEY (P_Id)

    ALTER TABLE Persons
    ADD CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)
     

    删除PRIMARY KEY约束

    ALTER TABLE Persons
    DROP PRIMARY KEY

    创建外键 FOREIGN KEY:

    CREATE TABLE Orders
    (
    O_Id int NOT NULL,
    OrderNo int NOT NULL,
    P_Id int,
    PRIMARY KEY (O_Id),
    FOREIGN KEY (P_Id) REFERENCES Persons(P_Id)
    )
     

    修改表以创建FOREIGN KEY :

    ALTER TABLE Orders
    ADD FOREIGN KEY (P_Id)
    REFERENCES Persons(P_Id)


    ALTER TABLE Orders
    ADD CONSTRAINT fk_PerOrders
    FOREIGN KEY (P_Id)
    REFERENCES Persons(P_Id)

     

    删除FOREIGN KEY约束

    ALTER TABLE Orders
    DROP FOREIGN KEY fk_PerOrders

     

    创建 CHECK约束:

    CREATE TABLE Persons
    (
    P_Id int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255),
    CHECK (P_Id>0)
    )

    CREATE TABLE Persons
    (
    P_Id int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255),
    CONSTRAINT chk_Person CHECK (P_Id>0 AND City='Sandnes')
    )
     

    修改表以创建CHECK约束

    ALTER TABLE Persons
    ADD CHECK (P_Id>0)

    ALTER TABLE Persons
    ADD CONSTRAINT chk_Person CHECK (P_Id>0 AND City='Sandnes')

     

    删除CHECK约束

    ALTER TABLE Persons
    DROP CONSTRAINT chk_Person

    ALTER TABLE Persons
    DROP CHECK chk_Person

    创建DEFAULT约束:

    My SQL / SQL Server / Oracle / MS Access:

    CREATE TABLE Persons
    (
    P_Id int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255) DEFAULT 'Sandnes'
    )

     

    修改表以创建DEFAULT约束:

    ALTER TABLE Persons
    ALTER City SET DEFAULT 'SANDNES'

    ALTER TABLE Persons
    ALTER COLUMN City SET DEFAULT 'SANDNES'

     

    删除DEFAULT约束

    ALTER TABLE Persons
    ALTER City DROP DEFAULT

     

    创建AUTO INCREMENT约束,它只能作用在主键上:

    CREATE TABLE Persons
    (
    P_Id int NOT NULL AUTO_INCREMENT,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255),
    PRIMARY KEY (P_Id)
    )


    我们可以设置自增的起始值:

    ALTER TABLE Persons AUTO_INCREMENT=100

     

    Indexes

    索引用来提高数据查找的效率,用户看不到索引的存在。注意:使用索引会使更新表的速度变慢,因为数据更新的同时还要更新索引。

    在表上创建一个允许重复值的索引

    CREATE INDEX index_name
    ON table_name (column_name)
     

    在表上创建唯一的索引

    CREATE UNIQUE INDEX index_name
    ON table_name (column_name)

     

    删除INDEX:

    ALTER TABLE table_name DROP INDEX index_name

     

    一个表上的约束可以通过SHOW INDEX FROMtbl_name来查看。mysql上可以通过修改一个列来增加约束:

     

    ALTER TABLE t1 MODIFY col1 BIGINT UNSIGNED DEFAULT 1 COMMENT 'my column';
    ALTER TABLE t1 CHANGE b b BIGINT NOT NULL;

    但是要删除约束只能使用前面所述的drop ...的方式。

     

     

    DROP TABLE 删除一张表:

    DROP TABLE table_name

     

    DROP DATABASE 删除一个数据库:

    DROP DATABASE database_name

     

    TRUNCATE TABLE可以删除一张表的所有数据而不删除该表:

    TRUNCATE TABLE table_name

     

    ALTER TABLE 可以修改一张表:

    增加一列:
    ALTER TABLE table_name
    ADD column_name datatype

    删除一列:

    ALTER TABLE table_name
    DROP COLUMN column_name

    修改一列:

    ALTER TABLE table_name ALTER COLUMN column_name datatype

    ALTER TABLE t1 MODIFY col1 BIGINT UNSIGNED DEFAULT 1 COMMENT 'my column';
    ALTER TABLE t1 CHANGE b b BIGINT NOT NULL;

     

     

    视图是基于一个SQL语句的结果集的一张虚拟表。视图的优点有:

    提供了逻辑数据独立性。当数据的逻辑结构发生改变时,原有的应用程序不用修改。

    简化了用户观点。用户只需用到数据库中的一部分,视图适应了用户需要。

    数据的安全保护功能。针对不同用户定义不同视图。

     

    创建视图

    CREATE VIEW view_name AS
    SELECT column_name(s)
    FROM table_name
    WHERE condition

    更新视图

    CREATE OR REPLACE VIEW view_name AS
    SELECT column_name(s)
    FROM table_name
    WHERE condition
     

    删除视图:

    DROP VIEW view_name

     

    MySQL的日期函数

    Function Description
    NOW() Returns the current date and time
    CURDATE() Returns the current date
    CURTIME() Returns the current time
    DATE() Extracts the date part of a date or date/time expression
    EXTRACT() Returns a single part of a date/time
    DATE_ADD() Adds a specified time interval to a date
    DATE_SUB() Subtracts a specified time interval from a date
    DATEDIFF() Returns the number of days between two dates
    DATE_FORMAT() Displays date/time data in different formats

     

    MySQL日期数据类型

    • DATE - format YYYY-MM-DD
    • DATETIME - format: YYYY-MM-DD HH:MM:SS
    • TIMESTAMP - format: YYYY-MM-DD HH:MM:SS
    • YEAR - format YYYY or YY

     

    IS NULL 操作符判断空值:

    SELECT LastName,FirstName,Address FROM Persons
    WHERE Address IS NULL

     

    IS NOT NULL 操作符判断非空值:

    SELECT LastName,FirstName,Address FROM Persons
    WHERE Address IS NOT NULL
     

    MySQL没有ISNULL函数,所以它使用IFNULL

    SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
    FROM Products

    COALESCE()函数:

    SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
    FROM Products

     

    MySQL数据类型

    MySQL有三种主要类型:text, number和Date/Time。

    Text types:

    Data type Description
    CHAR(size) Holds a fixed length string (can contain letters, numbers, and special characters). The fixed size is specified in parenthesis. Can store up to 255 characters
    VARCHAR(size) Holds a variable length string (can contain letters, numbers, and special characters). The maximum size is specified in parenthesis. Can store up to 255 characters.Note: If you put a greater value than 255 it will be converted to a TEXT type
    TINYTEXT Holds a string with a maximum length of 255 characters
    TEXT Holds a string with a maximum length of 65,535 characters
    BLOB For BLOBs (Binary Large OBjects). Holds up to 65,535 bytes of data
    MEDIUMTEXT Holds a string with a maximum length of 16,777,215 characters
    MEDIUMBLOB For BLOBs (Binary Large OBjects). Holds up to 16,777,215 bytes of data
    LONGTEXT Holds a string with a maximum length of 4,294,967,295 characters
    LONGBLOB For BLOBs (Binary Large OBjects). Holds up to 4,294,967,295 bytes of data
    ENUM(x,y,z,etc.) Let you enter a list of possible values. You can list up to 65535 values in an ENUM list. If a value is inserted that is not in the list, a blank value will be inserted.

    Note: The values are sorted in the order you enter them.

    You enter the possible values in this format:ENUM('X','Y','Z')

    SET Similar to ENUM except that SET may contain up to 64 list items and can store more than one choice

     

    Number types:

    Data type Description
    TINYINT(size) -128 to 127 normal. 0 to 255 UNSIGNED*. The maximum number of digits may be specified in parenthesis
    SMALLINT(size) -32768 to 32767 normal. 0 to 65535 UNSIGNED*. The maximum number of digits may be specified in parenthesis
    MEDIUMINT(size) -8388608 to 8388607 normal. 0 to 16777215 UNSIGNED*. The maximum number of digits may be specified in parenthesis
    INT(size) -2147483648 to 2147483647 normal. 0 to 4294967295 UNSIGNED*. The maximum number of digits may be specified in parenthesis
    BIGINT(size) -9223372036854775808 to 9223372036854775807 normal. 0 to 18446744073709551615 UNSIGNED*. The maximum number of digits may be specified in parenthesis
    FLOAT(size,d) A small number with a floating decimal point. The maximum number of digits may be specified in the size parameter. The maximum number of digits to the right of the decimal point is specified in the d parameter
    DOUBLE(size,d) A large number with a floating decimal point. The maximum number of digits may be specified in the size parameter. The maximum number of digits to the right of the decimal point is specified in the d parameter
    DECIMAL(size,d) A DOUBLE stored as a string , allowing for a fixed decimal point. The maximum number of digits may be specified in the size parameter. The maximum number of digits to the right of the decimal point is specified in the d parameter

    *The integer types have an extra option called UNSIGNED. Normally, the integer goes from an negative to positive value. Adding the UNSIGNED attribute will move that range up so it starts at zero instead of a negative number.

    Date types:

    Data type Description
    DATE() A date. Format: YYYY-MM-DD

    Note: The supported range is from '1000-01-01' to '9999-12-31'

    DATETIME() *A date and time combination. Format: YYYY-MM-DD HH:MM:SS

    Note: The supported range is from '1000-01-01 00:00:00' to '9999-12-31 23:59:59'

    TIMESTAMP() *A timestamp. TIMESTAMP values are stored as the number of seconds since the Unix epoch ('1970-01-01 00:00:00' UTC). Format: YYYY-MM-DD HH:MM:SS

    Note: The supported range is from '1970-01-01 00:00:01' UTC to '2038-01-09 03:14:07' UTC

    TIME() A time. Format: HH:MM:SS

    Note: The supported range is from '-838:59:59' to '838:59:59'

    YEAR() A year in two-digit or four-digit format.

    Note: Values allowed in four-digit format: 1901 to 2155. Values allowed in two-digit format: 70 to 69, representing years from 1970 to 2069

     

     

    SQL聚集函数计算某列的各值,返回单一值。

    有用的集体函数有:

    • AVG() -平均数
    • COUNT() -计数
    • FIRST() -第一个值
    • LAST() -最后一个值
    • MAX() -最大值
    • MIN() -最小值
    • SUM() -求和

    这些函数会计算重复值,可以使用DISTINCT来消除重复,比如:select sum(distinct age) from persons。

    结果也可以用AS来起别名,比如select sum(age) as MySum from persons。

     

    在MySql里没有first和last,所以

    SELECT FIRST(OrderPrice) AS FirstOrderPrice FROM Orders

    等价于:

    SELECT OrderPrice FROM Orders ORDER BY O_Id LIMIT 1


    SELECT LAST(OrderPrice) AS LastOrderPrice FROM Orders

    等价于:

    SELECT OrderPrice FROM Orders ORDER BY O_Id DESC LIMIT 1

     

    GROUP BY可以根据记录在某列上的值把表的记录分组,然后分别计算各组的聚集函数的值。它也能指定多个列比如:

    SELECT Customer,OrderDate,SUM(OrderPrice) FROM Orders
    GROUP BY Customer,OrderDate

    HAVING可以在查询时使用一个聚集函数来指定条件,它之前必须可以有group by修饰:

    SELECT column_name, aggregate_function(column_name)
    FROM table_name
    WHERE column_name operator value
    GROUP BY column_name
    HAVING aggregate_function(column_name) operator value

     

    Having与WHERE的区别是:

    where决定哪些元组被选择参加运算,作用于关系中的元组;

    Having决定哪些分组符合要求,作用于分组;

    聚集函数的条件关系必须用Having,Where不应该出现聚集函数。

     

    SQL标量函数基于输入值返回单个值。有用的标量函数有:

    • UCASE() -转换成大写。
    • LCASE() - 转换成小写。
    • MID() - 抽取子字符串。
    • LEN() - 得到字符串的长度。
    • ROUND() - 舍取一个小数。
    • NOW() - 返回当前日期和时间。
    • FORMAT() - 格式化显示。

    SQL UCASE() 语法

    SELECT UCASE(column_name) FROM table_name

    SQL MID() 语法

    SELECT MID(column_name,start[,length]) FROM table_name

    SQL ROUND() 语法

    SELECT ROUND(column_name,decimals) FROM table_name

    SQL FORMAT() 语法

    SELECT FORMAT(column_name,format) FROM table_name

     

    Parameter Description
    column_name Required. The field to be formatted.
    format Required. Specifies the format.

     

    参考:http://www.w3schools.com/sql

     

    第五章 数据库设计

    软件工程与软件生命周期

    软件生存期是指从软件的规划、研制、实现、测试、投入运行后的维护,直到它被新的软件所取代而停止使用的整个历程。

     

    数据库工程与数据库生存期

    数据库应用系统从规划、设计、实现、测试、运行中的维护到最后被新的系统取代而停止使用的整个期间,称为数据库生存期。它包括规划、需求分析、概念设计、逻辑设计、物理设计、实现、运行和维护。

     

    数据库设计的输入输出

    输入:总体信息需求、处理需求、DBMS的特征、硬件和OS特征。

    输出:完整的数据库结构、基于数据库结构和处理需求的应用程序设计原则。

     

    数据库设计的阶段划分

    规划阶段:系统调查、可行性分析、确定数据库系统的总目标和制定项目开发计划。

    需求分析阶段:分析用户活动,产生业务流程图;确定系统范围,产生系统范围图;分析用户活动设计的数据,产生数据流图;分析系统数据,产生数据字典。

    概念设计阶段:进行数据抽象,设计局部概念模式;将局部概念模式综合成全局概念模式。

    逻辑设计阶段:从之前得到的概念模式出发,1、导出初始DBMS模式说明;2、子模式设计和应用程序设计草图;3、模式评价;4,如果处理结束,则进入物理设计阶段,否则进入下一步;5、检查模式是否需要修正,如果需要则修正模式,并回到第2步,否则回到前面的阶段。

    物理设计阶段:存储记录结构设计;确定数据存放位置;存取方法的设计;完整性和安全性考虑;程序设计。

    数据库实现:定义数据库结构;数据装载(大型应用和小型应用);编制和调试应用程序;数据库试运行。

    数据库的运行与维护:数据库的转储和恢复;数据安全性、完整性控制;数据库性能的监督,分析和改进;数据库的重组织和重构造。

     

    之前所述的总体信息需求在需求分析和概念设计中被使用;处理需求在需要分析、逻辑设计、物理设计阶段中都有使用;DBMS特征在逻辑设计和物理设计阶段中被使用;硬件和OS特征只在物理设计阶段被使用。

     

    第六章 关系数据库的规范化理论

    问题的提出

    设有关系模式R(姓名,电话,参与的俱乐部,俱乐部的活动),候选码为(姓名,参与的俱乐部)。

     

    姓名 电话 参与的俱乐部 俱乐部的活动
    A 123 乒乓club 打乒乓球
    A 123 登山club 爬山
    B 456 乒乓club 打乒乓球
    B 456 英语club 学习英语
    C 789 登山club 爬山
    C 789 英语club 学习英语

     

    注意到上面的模式有什么问题?

    1、数据冗余:一个人参与几个俱乐部,那么他的电话会重复几次;同样,一个俱乐部被几个人参加,它的活动就会重复几次。

    2、修改异常:一旦一个人的手机号变化,那么对应于他参与的每个俱乐部的各行里的电话都需要修改,如果有遗漏,那么会造成数据不一致;俱乐部的活动也是如此。

    3、插入异常:如果一个新人到来,还未参加任何俱乐部,那么他的信息和电话就无法插入到这张表里,因为参与的俱乐部是主属性,不能为空。

    4、删除异常:如果某人暂时退出了所有的俱乐部,那么必须把所有的元组都删去,这样这个人的姓名和电话信息也不存在了。

     

    问题的解决方式是把关系模式R分解成三个模式:

     

    姓名 电话
    A 123
    B 456
    C 789

     

     

    俱乐部 活动
    乒乓club 打乒乓球
    英语club 学习英语
    登山club 爬山

     

     

    姓名 参与的俱乐部
    A 乒乓club
    A 登山club
    B 乒乓club
    B 英语club
    C 登山club
    C 英语club

     

     

    函数依赖(FD,Functional Dependency)

    实际上关系模式的更新异常是由属性间的数据依赖引起的,数据依赖指数据之间存在着某种内在的联系,如姓名和电话之间,每一个人都有一个确定的电话,姓名的一个取值可以确定唯一的地址。

    函数依赖的概念为:设有关系模式R(U),X和Y是属性集U的子集,函数依赖是形为X→Y的一个命题,只要有r是R的当前关系,对r中的任意两个元组t和s,都有t[X] = s[X]蕴涵t[Y] = s[Y],那么称函数依赖X→Y在关系模式R(U)中成立。比如前面的U是(姓名,电话,参与的俱乐部,俱乐部的活动),子集X为(姓名),子集Y为(电话)。

    函数依赖的文字化定义:设R(U)是属性集U上的关系模式,X、Y是U的子集,若对于R(U)的任意一个可能的关系r,R中不可能存在两个元组在X的属性值上相等,而在Y上的属性值不等,则称“X函数确定Y”,或“Y函数依赖于X”,记作X→Y。例如姓名→电话。

    FD的推理规则有:

    基本规则:

    1、自反性:Y⊆X ⇒ X →Y

    2、增广性:XZ →YZ

    3、传递性:X →Y, Y →Z ⇒ X →Z

    扩展规则:

    4、合并性:{X →Y, X →Z} ⇒ X →YZ

    5、分解性:{X →Y, Z ⊆ Y} ⇒ X →Z

    6、伪传递性:{X →Y, WY →Z} ⇒ WX →Z

    7、复合性:{X →Y, W →Z} ⇒ WX →YZ

     

    函数依赖的性质有:

    1、若X→Y,但X ⊄ Y,则称X→Y是非平凡的函数依赖,一般不特殊指明的情况下,我们总是讨论非平凡函数依赖。

    2、若X→Y,则称X是决定因素。

    3、若Y不函数依赖于X,则记作X↛Y

    4、若X→Y,Y→X,则称X与Y一一对应,记为X↔Y。

    在R(U)中,如果X→Y,并且对于X的任意一个真子集X',都有X'↛Y,则称Y完全函数依赖于X,或Y对X完全函数依赖,记作X-f->Y,否则称Y对X部分函数依赖,X-p->Y。

    在关系模式R(U)中,如果X→Y,(X ⊄ Y),Y→Z,则称Z对X传递函数依赖

    设K为R<u,f>中的属性或属性组,若K-f->u,则K为R的候选码,若候选码多于一个,则选其中一个作为主码。特殊情况:所有属性构成码,称为全码。包含在任何一个候选码中的属性,叫主属性(Prime Attribute),不包含在任何码中的属性为非主属性,或非码属性

    关系模式R中属性或属性组X并非R的主码,但它是另一个关系模式的主码,则称X是R的外码(Foreign Key)。关系间是通过主码和外码进行联系的。

     

     

    规范化理论

    1971年起E.F.Codd提出了规范化理论。该理论按属性间的依赖情况(如函数依赖)规范关系模式。按规范化的程度不同分为第一范式1NF(Normal Form)、2NF、3NF、BCNF及4NF,逐步消除更新异常问题。

    若R属于第几范式,一般记为R∈XNF,一个低一级范式的关系模式,通过模式分解总可以将它分解为若干个高一级范式的关系模式的结合,这种过程就叫规范化

    设有关系模式R(U),属性集为U,R1、……、Rk都是U的子集,并且有R1∪R2∪……∪Rk=U。关系模式R1,……,Rk的集合用ρ={R1,……,Rk}。用ρ代替R的过程为关系模式的分解

     

    1NF指每一个分量都是不可分的,这是最基本的规范化。即关系的所有属性都只能是预定义的简单变量,如整型,而不能是结构体。

    2NF的定义为:如果R∈1NF,且每个非主属性完全函数依赖于码,则R∈2NF。如本章最开始提出的问题,在属性性(姓名,电话,参与的俱乐部,俱乐部的活动)里,候选码为(姓名,参与的俱乐部),即姓名和参与的俱乐部是主属性,但是“电话”部分函数依赖于“姓名”,并没有完全函数依赖于码;“俱乐部的活动”同样也部分函数依赖于“俱乐部”。它便是由于违反了2NF,才造成了更新异常。而表的拆分便是关系模式的分解

    3NF的定义:关系模式R<U,F>中若不存在这样的码X,属性组Y及非主属性Z(Z⊄Y),便利X→Y,Y→Z成立,则称R∈3NF。

    比如关系

    员工 所在分公司 分公司总裁

    其中“员工”是主码,员工→所在分公司,所在分公司→分公司总裁。所以它违反了3NF。它造成的问题有修改异常:员工换了分公司的话,总裁属性也必须修改。遗漏会造成数据不一致。我们可以把它模式分解为:

    员工 所在分公司
    分公司 总裁

    2NF、3NF有一个缺陷:它们只限制了主码对非主属性的部分函数依赖或传递函数依赖,但并没有对主属性进行限制。

    比如

    学号 姓名 课程名

    假定姓名没有重名的,那么(学号,课程名)和(姓名,课程名)都可以是候选键,也就是说三个属性都是主属性。如果我们选取(学号,课程名)作为主码,有(学号,姓名)→学号,学号→姓名的传递依赖,也可以理解为部分依赖,但是因为姓名是主属性,所以这个关第符合2NF、3NF。然而,它有之前讨论过的冗余和更新异常的问题。

    BCNF(Boyce Codd Normal Form)是由Boyce和Codd提出的,比3NF又进一步,通常认为BCNF是修正的第三范式,有时也称为3NF。它的定义为:如果关系模式R是1NF,且每个属性(包括主属性)都不传递依赖于R的候选键,那么称R是BCNF范式。若R∈BCNF,则R∈3NF。

     

    范式是衡量关系模式好坏的标准,它与数据依赖有着直接的联系。1NF是关系模式的基础(对象模式违背了1NF),2NF已经称为历史,3NF和BCNF是最为常见的范式。

     

    第七章 数据存储

     

    物理存储媒介的分类

    高速缓冲区:现今的AMD和Intel的CPU都在芯片内部集成了数据高速缓存和指令高速缓存,通称了L1高速缓存;比L1更大的L2高速缓存曾放在CPU外部的主板或CPU接口上,现在已经成为CPU内部的标准部件了;高端家用机或工作站甚至配备了L3缓存器。高速缓存使用静态随机存取存储器StaticRandomAccessMemory, SRAM)技术,比主存的DRAM技术快。

     

    主存储区:使用动态随机存取(Dynamic Random Access Memory,DRAM)技术,性价比很高,扩展性也不错。DRAM里面所储存的数据需要周期性地更新,所以比SRAM较慢。最近生产的(2010年后)计算机主要使用的主存是DDR 3 SDRAM(第三代双倍资料率同步动态随机存取内存,Double-Data-Rate Three Synchronous Dynamic Random Access Memory)。

     

    快擦写存储器:一种EEPROM芯片,EEPROM,或写作E2PROM,全称电子抹除式可复写只读内存 (Electrically-Erasable Programmable Read-Only Memory),是一种可以通过电子方式多次复写的半导体存储设备。相比EPROM(Erasable Programmable Read Only Memory,可擦除可编程式只读内存),EEPROM不需要用紫外线照射,也不需取下,就可以用特定的电压,来抹除芯片上的信息,以便写入新的数据。EEPROM被广泛用于需要经常擦除的BIOS芯片,以及快闪存储器Flash Memory,简称闪存),并逐步替代部分有断电保留需要的RAM芯片,甚至取代部份的硬盘功能(固态硬盘Solid State Disk、Solid State Drive,简称SSD)。

     

    磁盘存储器:利用磁记录技术在涂有磁记录介质的旋转圆盘上进行数据存储的辅助存储器。具有存储容量大、数据传输率高、存储数据可长期保存等特点。

     

    光存储器:由光盘驱动器和光盘片组成的光盘驱动系统,光存储技术是一种通过光学的方法读写数据的一种技术,它的工作原理是改变存储单元的某种性质的反射率,反射光极化方向,利用这种性质的改变来写入存储二进制数据.在读取数据时,光检测器检测出光强和极化方向等的变化,从而读出存储在光盘上的数据.由于高能量激光束可以聚焦成约0.8μm的光束,并且激光的对准精度高,因此它比硬盘等其他存储技术具有较高的存储容量.

     

    磁带:一种用于记录声音、图像、数字或其他信号的载有磁层的带状材料,是产量最大和用途最广的一种磁记录材料。作为数字信息的存贮具有容量大、价格低的优点。主要大量用于计算机的外存贮器。目前仅在专业设备上使用(比如车床控制机)。

     

    数据存储文件的组织结构

    堆文件:Heap File。插入的记录被添加到文件的末尾,因此文件是无序的。记录被删除时,会在文件中间留下空白行,所以堆文件需要周期性地压缩来恢复空间。

    顺序文件:Sequential File。记录以查找键的升序或降序的顺序存储。文件在载入到内存里时,可以以随机方式读取数组,比如可用二分查找法来优化查找时间。但把新记录写入到文件时,必须以顺序方式。

    散列文件:Hash File。记录存储的地址(块号)是记录的某个属性值通过散列函数求得的值。

    聚集文件:Cluster File。“聚集(Clustering)”的意义是为了访问的效率把相关的数据存储在一起。多个数据库和多上表被合并(join)被称为聚集(cluster)。共享同一个聚集关键字的表被存储在一起,在相同或相邻的数据块里。这样可以提升表在聚集关键字上进行的聚集操作的效率。

     

    第八章 索引机制

    索引的概念:在数据文件中,根据记录建立的一种数据结构,以次线性时间查找(sublinear time lookup)来加快查询速度。索引也用来监管数据库约束,比如unique、exclusion、primary key和foreign key。

     

    索引的架构(Index architecture)

     

    非簇集索引(Non-Clustered):数据以任意序表示,但索引指明了它的逻辑序(logical ordering)。数据行无视被索引的列的值而遍布在表中,但非簇集索引树包含排好序的索引关键字,并在叶子级包含记录的指针(页结构引擎(page-organized engines)里的页和数据页里的行号;文件结构引擎(file-organized engines)里的行偏移量)。

    在非簇集索引里,数据存储的顺序和索引不同。索引通常在join、where、和order by语句里使用的非主键列上创建。在一个数据库表上,可以创建多个非簇集索引。

    簇集索引(Clustered):数据块以特定的顺序聚集来匹配索引,导致行数据顺序存储。因此,一张表只能创建一个簇集索引。如果文件记录以非码字段排序,那么这个字段称为簇集字段(cluster field)。

    有些数据库把簇集索引和记录分开存储在不同文件里,而其它一些则把它们存储在同一文件的不同数据块里。簇集索引里包含有序的记录,每个记录包含两人个字段。第一个字段和数据的簇集字段有相同的数据类型;第二个字段是一个指针。

    当数据以和簇集索引相同或相反的顺序访问,或选择一个范围里的数据时,簇集索引可以大幅提升访问速度。

     

    索引的类型(Types of indexes)

    位图索引(Bitmap index):一种特殊的索引,把它的大块数据存储在位数组(bit array)里,也就是位图里。多数查询都通过位逻辑操作来完成。如果索引的值不重复或只重复较少的次数时,那么最普遍使用的索引,比如b+tree,是最高效的。相反,位图索引被设计用在变量值频繁重复的情况下。比如只有“男”和“女”的性别属性。

    稠密索引(Dense index):数据文件里的每个记录所对应的“关键字-指针”对所组成的文件。也就是说,数据文件里每个记录都有索引。在有重复关键字的簇集索引里,稠密索引指向该关键字的第一条记录。

    稀疏索引(Sparse index):或非稠密索引(nondense index)。数据文件里的每个块都有相应的“关键字-块”对。在有重复关键字的簇集索引里,块指针指向每个块的最小的搜索键(lowest search key)。

    逆索引(Reverse index):在把关键字插入到索引之前,把关键字翻转。比如:值12345在索引里成为54321。它对于索引诸如序号(sequence number,单调增加的值)的值非常有用,特别是在大容量的事务处理系统(Transaction processing system)上,因为它们可以减少索引块的竞争。

    逆索引使用b-tree结构实现。

     

    主索引和辅索引

    主索引(Primary Key)建立在有序文件中的排序码字段上。辅索引(Secondary Key)指定在文件的任何非排序字段上。同一个文件只能有一个主存取方式,但是可以有多个辅助索引,从而有多个索引字段。当辅索引建立在码上时,该码字段被称为辅码(Secondary Key)。

     

    索引文件的组织:线性索引、树形索引和散列索引。

     

    第九章 并发控制和故障恢复

    事务、并发控制的概念

    事务(Transaction)是构成单一逻辑工作单元的操作集合。

    在多用户在线共享系统中,许多事务可能同时对同一数据进行操作,称为并发操作。并发可能导致的问题有:丢失更新问题、读胀数据问题、错误求和问题、和不可重复读问题等等。

    并发控制负责协调并发事务的执行,保证数据库的完整性,同时避免用户得到不正确的数据。

     

    事务的基本属性

    原子性(Atomicity):一个事务对数据库的所有操作,是一个不可分割的工作单元。这些操作要么全部执行,要么什么也不做。

    一致性(Consistency):一个事务独立执行的结果,应保持数据库的一致性,即数据不会因事务的执行而遭到破坏。

    隔离性(Isolation):在多个事务并发执行时,系统应保证与这些事务先后独立执行的结果一样。

    持久性(Durability):一个事务一旦完成全部操作后,他对数据库的所有更新应永久地反映在数据库中。

    这些属性的首字母缩写为ACID。其中原子性是最主要的根本目标;其它三个是辅助的属性。

     

    第十章 数据库完整性机制

    数据库完整性的概念

    与关系数据库的完整性不同,数据库完整性表示数据的正确性(accurate)、有效性(valid)和相容性(consistent),防止错误的数据进入数据库。

    正确性指数据的合法性;

    有效性指数据是否属于所定义的有效范围;

    相容性指表示同一事实的两个数据应相同。

    在对数据库提交修改前,必须要满足所应用的完整性约束(Integrity constraints)和数据验证(Data validation)。

    完整性除了在第三章所述的实体完整性(Entity Integrity)、参照完整性(Referential Integrity)、和用户定义完整性(User Defined Integrity),还有域完整性(Domain Integrity):数据必须为预定义的数据类型,同时属性值的限制:比如取值范围,没有提供值时的默认值,以及是否可以为空等。

     

    完整性子系统

    DBMS中执行完整性检查的子系统称为“完整性子系统”。它检测事务的执行,并测试是否违反完整性的规则。若有违反完整性规则,则采取适当的操作。

     

    完整性规则集

    完整性规则集是由DBA或应用程序员事先向完整性子系统提供的有关数据约束的一组规则。它由以下部分组成:

    1、什么时候使用规则进行检查(称为规则的触发条件);

    2、要检查什么样的错误(称为约束条件或谓词);

    3、如果查出错误,应该怎么办(称为“ELSE子句”,即违反时要做的动作)。

     

    SQL完整性约束分类

     

    域约束:在域定义中定义的一种约束。域约束与在特定域中定义的任何列有关。

     

    断言:在断言定义中定义一种约束。断言可以与一个或多个表进行关联。

    断言仅仅是一种可以用于多个表的CHECK约束,因此必须在表定义之外独立的创建断言。

     

    与表相关的约束:它是在表定义中定义的一种约束。该约束可以被定义为列定义的一部分,或者定义为表定义中的一个元素。在表级别定义的约束可以应用于一个或多个列。

    列约束:NOT NULL,UNIQUE PRIMARY KEY,FOREIGN KEY,CHECK

    表约束:UNIQUE PRIMARY KEY,FOREIGN KEY,CHECK

     

    第十一章 数据库安全机制

    数据库安全性机制的概念

    数据库的安全是指保护数据库,防止不合法的使用,导致数据的泄密、更改或破坏。

     

    安全性的级别

    环境级:计算机系统的机房和设备应加以保护,防止有人进行物理破坏。

    职员级:工作人员应清正廉洁,正确授予用户访问数据库的权限。

    OS级:应防止未经过授权的用户从OS处着手访问数据库。

    网络级:由于大多数DBS都允许用户通过网络进行远程访问,因此网络软件内部的安全性是很重要的。

    DBS级:DBS的职责是检查用户的身份是否合法以及使用数据库的权限是否正确。

     

    授权子系统

     

    自主访问控制(DAC)

    自主访问控制机制允许对象的属主来制定针对该对象的保护策略。通常DAC通过授权列表(或访问控制列表)来限定哪些主体针对哪些客体可以执行什么操作。如此将可以非常灵活地对策略进行调整。由于其易用性与可扩展性,自主访问控制机制经常被用于商业系统。

    六种权限:SELECT、INSERT、DELETE、UPDATE、REFERENCES、和USAGE。

    赋予权限:GRANT <权限表> ON <数据库元素> TO <用户名表> [WITH GRANT OPTION]

    收回权限:REVOKE <权限表> ON <数据库元素> FROM <用户名表> [RESTRICT | CASCADE]

     

     

    强制访问控制(MAC)

    用来保护系统确定的对象,对此对象用户不能进行更改。也就是说,系统独立于用户行为强制执行访问控制,用户不能改变他们的安全级别或对象的安全属性。这样的访问控制规则通常对数据和用户按照安全等级划分标签,访问控制机制通过比较安全标签来确定的授予还是拒绝用户对资源的访问。强制访问控制进行了很强的等级划分,所以经常用于军事用途。

     

    视图机制

    用来对无权用户屏蔽数据。数据安全,逻辑数据独立性和操作简便性。

     

    数据加密

    常用的数据库加密技术有:库外加密库内加密、和硬件加密

    展开全文
  • Redis数据库

    2019-06-17 20:11:00
    Redis数据库是目前NoSQL数据库中应用最广泛的数据库,其最大特征是实现数据的分布式缓存,随着集群设计的逐步普及,很多的开发过程中为了提高程序的处理性能,所以往往会使用缓存,但是在集群环境就必须考虑到其它...

    Redis简介

           Redis数据库是目前NoSQL数据库中应用最广泛的数据库,其最大特征是实现数据的分布式缓存,随着集群设计的逐步普及,很多的开发过程中为了提高程序的处理性能,所以往往会使用缓存,但是在集群环境就必须考虑到其它服务也需要相应的数据,所以才需要建立分布式缓存。

           Redis是由意大利人Salvatore Sanfileppo(网名:antirez)开发的一款内存高速缓存数据库;

           Redis全称是:Remote Dictionary Server(远程数据服务),软件使用C语言编写;

           Redis是开源的,使用key-value存储可用于构建高性能,可扩展的Web应用程序的解决方案;

           支持丰富的数据类型,如:string,list,set,zset(sorted set),hash,GEO,Stream(据说性能可以与Kafka性能相当)

          Redis特点

          > 异常迅速:Redis响应速度快,美妙可以执行大约110000设置的操作,81000个/美妙的读取操作;

          >支持丰富的数据类型:Redis支持列表,集合,可排序集合,哈希等数据类型;

          >原子性操作:所有的Redis的操作都是源自,可以确保两个客户同时访问Redis服务器得到的是更新后的最新值;

          >MultiUtility工具: 可以在缓存,消息传递队列中使用(Redis原生支持发布/订阅),在程序应用中:Web应用程序会话, 网站羊肉面点击数等任和短站的数据。

          Redis与Memcached比较

           >Redis支持比Memcached更多的数据类型;

           >Redis支持主从结构(Master-Slave)可以实现数据备份;

           >Redis支持数据持久化,可以将数据保存到磁盘中,重启时数据依然可用。

           Memcached最大特点时所有的数据都保存在内存中,如果实例关闭。所有的数据都会消失。

     

           Redis雪崩:

                 使用Redis主要是解决SQL数据库查询性能慢的问题,所以在实际的项目中会是首先将需要的数据保存在Redis数据库中,这样就可以避免SQL数据库的频发查询,但是如果按照则正常的设计思路来讲,如果此时的Redis没有数据则会向SQL数据库查询,呢吗如果此时Redis在高并发访问下已经瘫痪了(无法使用),最终的结果是是所有的用户请求都会发送给SQL数据库,那么首先SQL数据库会甭哭,随后连带数据层和业务层也会雪崩,最终影响到WEB端,导致整个程序不能运行。

                  造成雪崩因素有:网络因素,单实例Redis问题,所以实际项目之中就可以考虑进行Redis集群开发,因为Redis官方没有提供Redis集群的设计方案,所以世界上Redis的集群设计方案非常多。

            数据会优先从Redis加载,如果无法加载,则会从传统数据库加载。

                    

    转载于:https://www.cnblogs.com/fcitx/p/11041942.html

    展开全文
  • 数据库课程设计

    万次阅读 多人点赞 2019-01-06 10:00:32
    图书管理系统 1.概述 项目背景 2.需求分析 2.1 系统需求 2.2 数据需求 2.3 数据字典 2.3.1 书籍信息表 2.3.2 库存信息表 2.3.4 顾客信息表 2.3.5 管理员信息表 ...3.数据库设计 3.1 ...

                                                 图书管理系统

    1.概述

    项目背景

    2.需求分析

    2.1 系统需求

    2.2 数据需求

    2.3  数据字典

    2.3.1 书籍信息表

    2.3.2 库存信息表

    2.3.4 顾客信息表

    2.3.5 管理员信息表

    2.3.6 图书类型信息表

    2.3.7 订单详细信息表

    3.数据库设计

    3.1 概念结构设计

    3.2 逻辑结构设计

    3.2.1 关系模型

    3.2.2 细化表结构

    3.3 数据库实施

    3.3.1 建表


    1.概述

    1. 项目背景

           目前社会上信息管理系统发展飞速,越来越多的企业事业单位引入信息管理软件来管理自己日益增长的各种信息。各种网店也采用了不同的管理系统来管理商品信息,取得了很大的成效。网上书店管理系统也在功能上不但完善和加强,为了使书店管理更加规范化,程序化,科学化,我们研发了网上书店管理系统。

    在电子商务网站中,网上书店是目前应用最广,最成功的典范之一。通过它用户可以在网络上通过Internet,突破时间和空间的限制而实现网上购书。网上书店的崛起对传统的图书流通体系产生了强烈的冲击,有效地缩短了图书流通大发行环节,将广大读者、图书、出版者、发行者紧密结合在一起,大大提高了图书流通率。

    1. 1系统说明

            本系统的功能是为管理者提供方便的管理、为顾客提供快捷的购买。系统的主要子模块有图书管理、用户管理等,可实现日常图书进货、发货业务。顾客可以进入图书查询界面通过图书类别、图书名称、图书编号等查询图书。管理者可以通过登录管理界面实现对图书的添加、修改、删除操作以及发货和查看顾客信息,管理员可以维护顾客的注册信息。用到的软件是SQL Server。

    2.需求分析

    2.1 系统需求

            书店管理系统要满足一下需求:第一,书店人员通过计算机管理各类图书,进行图书分类编号,调整图书结构,增加图书库存,适应读者需求。第二,管理员对读者的需求情况能做好全面的掌握,及时得到历史销售记录。第三,对图书的销售管理。

    2.2 数据需求

    基于系统需求分析,该系统需要实现以下基本功能:

    1、顾客信息的输入、查询、修改,包括注册名,真实姓名,家庭住址,联系方式,订单号。

    2、书籍类别制定、信息输入、查询、修改,包括类别编号,类别名称。

    3、书籍信息的输入、查询、修改,包括数据的编号、名称、类别、作者姓名、出版社名称、出版日期。

    4、订单信息的查询、修改,包括订单号,订购人,订购日期,订购书籍的编号、书籍数量、发货日期。

    5、库存信息的输入、查询、修改,包括书籍的编号、库存量、价格。

    6、管理员信息的输入、查询、修改,包括管理员编号、具体身份。

    2.3  数据字典

    2.3.1 书籍信息表

              含义说明:书店关系体统的核心信息,提供了书籍的具体信息。

         组成:ISBN号,书籍名称,书籍作者,书籍出版年份,书籍价格

    数据项

    含义说明

    数据类型

    数据长度

    取值范围

    ISBN号

    区别每本书的唯一标识

    varchar

    80

    任意合法字符且在长度范围内

    书籍名称

    书籍名称

    Varchar

    80

    合法字符

    书籍作者

    书籍作者

    varchar

    10

    合法字符

    书籍出版年份

    书籍出版日期

    Datetime

    日期型的长度

    符合日期的规则

    成交量

    书籍的成交量

    BIGINT

    大整数

    图书的成交量

    出版社

    书籍的出版社

    Char

    30

    合法字符

    图书定价

    书籍价格

    Int

    长整数

    图书的价格

    折扣

    图书售卖时的折扣

    Int

    长整数

    图书的折扣

    2.3.2 库存信息表

         含义说明:书店关系系统的核心信息,提供了库存的信息。

         组成:ISBN号,库存量,价格,折扣,库存下限(如果低于下限则提示进货)

    数据项

    含义说明

    数据类型

    数据长度

    取值范围

    ISBN号

    区别每本书的唯一标识

    varchar

    80

    合法字符

    库存量

    书籍的存货量

    int

    10

    1-9999999999

    库存下限

    书籍在仓库中的最少数量

    int

    10

    1-9999999999

     

     

    2.3.3 订单信息表

          含义说明:书店关系系统的核心信息,提供了订单的具体信息。

          组成:订单号,订购人,订购日期,订单书籍,书籍数量,发货日期。

    数据项

    含义说明

    数据类型

    数据长度

    取值范围

    订单号

    区别每个不同订单的唯一标识

    Varchar

    20

    合法的字符

    订购人

    订购人的注册网名

    Varchar

    10

    合法的字符

    订购日期

    用户生成订单的时间

    Datetime

    日期型的长度

    满足特定的日期格式

    订单书籍

    订单书籍的ISBN号

    Varchar

    80

    合法的字符

    书籍数量

    每份订单书籍的数量

    Int

    1

    1-9999999999

    发货日期

    管理员确定发货时间

    Datetime

    日期长度

    满足日期格式

    2.3.4 顾客信息表

           含义说明:书店关系系统的核心信息,提供了顾客的具体信息。

           组成:注册名,真实姓名,家庭住址,联系方式,购书卡号。

    数据项

    含义说明

    数据类型

    数据长度

    取值范围

    注册名

    唯一区分用户的表示

    Varchar

    20

    合法的字符

    真实姓名

    顾客的真实姓名

    Varchar

    20

    合法的字符

    家庭住址

    顾客收货地址

    Varchar

    100

    合法的字符

    联系方式

    顾客的电话号码

    Varchar

    20

    合法的字符

    购书卡号

    顾客的购书卡号

    Varchar

    30

    合法的字符

    2.3.5 管理员信息表

           含义说明:书店关系系统的核心信息,提供了雇员的基本信息,管理权限等。

           组成:管理员编号,名字,密码,具体身份(超级管理员,书籍管理员,用户管理员,订单管理员),管理员邮箱。

    数据项

    含义说明

    数据类型

    数据长度

    取值范围

    管理员编号

    唯一区分管理员的表识

    varchar

    20

    合法的字符

    管理员名字

    管理员的姓名

    varchar

    20

    合法的字符

    密码

    管理员进入系统的密码

    varchar

    10

    合法的字符

    具体身份

    管理员管理范围

    Varchar

    20

     

    邮箱

    管理员与用户交流方式

    Varchar

    30

    合法的邮箱地址

    2.3.6 图书类型信息表

    含义说明:提供了书籍的类别信息。

           组成:图书类型编号,类别名称。

    数据项

    含义说明

    数据类型

    数据长度

    取值范围

    数据类型号

    区别图书类型的唯一标识

    Varchar

    20

    任意合法字符且在长度范围内

    类别名称

    类别名称

    Varchar

    80

    合法字符

    2.3.7 订单详细信息表

          含义说明:提供订单的详细信息。

           组成:详细订单编号,订单号,图书编号,订购数量,发货状态,收货状态,卖出总价。

    数据项

    含义说明

    数据类型

    数据长度

    取值范围

    详细订单号

    区别每个详细订单的唯一标识

    Varchar

    80

    任意合法字符且在长度范围内

    订单号

    区别每个不同订单的唯一标识

    Varchar

    80

    合法字符

    订购数量

    每份订单的图书数量

    Varchar

    10

    合法字符

    发货状态

    卖家的发货状态信息

    Datetime

    日期型的长度

    符合日期的规则

    收货状态

    顾客收货状态信息

    Varchar

    20

    合法字符

    卖出总价

    订单的总额

    Varchar

    20

    合法字符

    3.数据库设计

    3.1 概念结构设计

    根据对网上书店的需求分析,画出如下E-R图。

     

                                                                               图1.书籍信息ER图

     

                                                                                      图2.库存信息ER图

          

     

                                                                                     图3.订单信息ER图

     

                                                                                          图4.顾客信息ER图

     

                                                                                            图5.管理员信息

     

                                                                                       图6.图书类型信息ER图

     

                                                                                   图7.订单详细信息ER图

     

                                                                                         图8.网上购书系统ER图

     

    3.2 逻辑结构设计

    3.2.1 关系模型

    根据E-R图转换成如下关系模型:

    书籍(ISBN、订单详情、书籍类型、管理员名称、书籍名称、作者、出版年份、成交量、出版社名称、折扣)。

    库存(ISBN库存量、库存下限,书籍名称)。

    订单(订单号顾客昵称、订购人、订购日期、订单书籍、书籍数量、发货日期)。

    顾客(注册名、管理员名称、真实姓名、家庭住址、联系方式、购书卡号)。

    管理员(管理员编号、管理员名字、密码、具体身份、邮箱)。

    图书类型(数据类型、类别名称)。

    订单详细(详细订单号、订单号、订购数量、发货状态、收货状态、卖出总价)

    3.2.2 细化表结构

        为方便,根据上述文字描述,用英文简写表和列。

    书籍信息表

    说明

    列名

    数据类型

    约束

    ISBN号

    BookISBNId

    Char

    主码

    订单详情

    BookOrder

    Char

    not null

    书籍类型

    BookType

    Char

    not null

    管理员名称

    BookAdminName

    Char

    not null

    书籍名称

    BookName

    Char

    not null

    作者

    BookWriter

    Char

    not null

    出版年份

    BookPrintYear

    Datetime

    not null

    成交量

    BookVOL

    BIGINT

    not null

    出版社名称

    BookPrintName

    Char

    not null

    折扣

    BookDiscount

    int

    not null

    库存表

    说明

    列名

    数据类型

    约束

    ISBN号

    EntreBookISBNId

    Char

    主码

    库存量

    EntreStock

    Int

    主码

    书籍名称

    EntreBookName

    char

    not null

    库存下限

    EntreFloorNum

    int

    not null

    订单表

    说明

    列名

    数据类型

    约束

    订单号

    OrderID

    Char

    主码

    顾客昵称

    OrderCusNickname

    Char

    主码

    订购人

    OrderCusName

    Char

    not null

    订购日期

    OrderData

    Datetime

    not null

    订单书籍

    OrderBook

    Char

    not null

    书籍数量

    OrderCount

    int

    not null

    发货日期

    OrderSendData

    Datetime

    not null

    顾客信息表

    说明

    列名

    数据类型

    约束

    注册名

    CusResNikeName

    char

    主码

    真实姓名

    CusName

    char

    not null

    家庭住址

    CusAddress

    char

    not null

    联系方式

    CusPhone

    char

    not null

    购书卡号

    CusBoughtCardId

    char

    not null

    管理员信息表

    说明

    列名

    数据类型

    约束

    管理员编号

    ManaID

    Char

    主码

    管理员名字

    ManaName

    Char

    not null

    密码

    ManaPasswd

    Char

    not null

    具体身份

    ManaIden

    Char

    not null

    邮箱

    ManaMail

    Char

    not null

    图书类型表

    说明

    列名

    数据类型

    约束

    数据类型

    BookClass

    Char

    主码

    类别名称

    BookClassName

    Char

    not null

    3.3 数据库实施

    3.3.1 建表

    书籍信息表:

    CREATE TABLE bookinfo (
    
    `BookISBNId`  char(80) NOT NULL ,
    
    `BookOrder`  char(80) NOT NULL ,
    
    `BookType`  char(50) NOT NULL ,
    
    `BookAdminName`  char(20) NOT NULL ,
    
    `BookName`  char(30) NOT NULL ,
    
    `BookWriter`  char(30) NOT NULL ,
    
    `BookPrintYear`  datetime NOT NULL ,
    
    `BookVOL`  bigint NOT NULL ,
    
    `BookPrintName`  char(30) NOT NULL ,
    
    `BookDiscount`  int NOT NULL ,
    
    PRIMARY KEY (`BookISBNId`)
    
    )
    
    ;

     

    库存信息表:

    CREATE TABLE  repertoryinfo(
    
    `EntreBookISBNId`  char(80) NOT NULL ,
    
    `EntreStock`  int NOT NULL ,
    
    `EntreBookName`  char(30) NOT NULL ,
    
    `EntreFloorNum`  int NOT NULL ,
    
    PRIMARY KEY (`EntreBookISBNId`, `EntreStock`)
    
    )
    
    ;

    订单表:

    CREATE TABLE orderinfo (
    
    `OrderID`  char(80) NOT NULL ,
    
    `OrderCusNickname`  char(20) NOT NULL ,
    
    `OrderCusName`  char(20) NOT NULL ,
    
    `OrderData`  datetime NOT NULL ,
    
    `OrderBook`  char(30) NOT NULL ,
    
    `OrderCount`  int NOT NULL ,
    
    `OrderSendData`  datetime NOT NULL ,
    
    PRIMARY KEY (`OrderID`, `OrderCusNickname`)
    
    )
    
    ;

    顾客信息表:

    CREATE TABLE cusinfo (
    
    `CusResNikeName`  char(20) NOT NULL ,
    
    `CusName`  char(20) NOT NULL ,
    
    `CusAddress`  char(50) NOT NULL ,
    
    `CusPhone`  char(15) NOT NULL ,
    
    `CusBoughtCardId`  char(30) NOT NULL ,
    
    PRIMARY KEY (`CusResNikeName`)
    
    )
    
    ;

    管理员信息表:

    CREATE TABLE managerinfo (
    
    `ManaID`  char(30) NOT NULL ,
    
    `ManaName`  char(20) NOT NULL ,
    
    `ManaPasswd`  char(30) NOT NULL ,
    
    `ManaIden`  char(20) NOT NULL ,
    
    `ManaMail`  char(20) NOT NULL ,
    
    PRIMARY KEY (`ManaID`)
    
    )
    
    ;

    图书类型表:

    CREATE TABLE booktypeinfo (
    
    `BookClass`  char(20) NOT NULL ,
    
    `BookClassName`  char(20) NOT NULL ,
    
    PRIMARY KEY (`BookClass`)
    
    )
    
    ;

     

    附操作bookinfo表的代码,仅仅实现功能,没有错误检查,什么都没有。(纯属应付,和数据库交互不能拼接SQL语句,防止SQL注入。)

    import pymysql
    
    # 参数一:mysql服务所在主机的ip
    # 参数二:用户名
    # 三:密码
    # 四:数据库名
    db = pymysql.connect('127.0.0.1', "root", "tian", "managebook")
    # 创建一个cursor对象
    flag=True
    while flag==True:
        cursor = db.cursor()
        print('1:增加')
        print('2:删除')
        print('3:修改')
        print('4:查找')
        print('5:退出')
        print('6:显示')
        work=input('请输入想要执行的功能\n')
        if work=='1':
            print("请输入书籍信息\n")
            s0=input('ISBN号:')
            s1 = input('订单详情:')
            s2 = input('书籍类型:')
            s3 = input('管理员名称:')
            s4 = input('书籍名称:')
            s5 = input('作者:')
            s6 = input('出版年份:')
            s7 = input('成交量:')
            s8 = input('出版社名称:')
            s9 = input('折扣:')
            sql="insert into bookinfo VALUES('%s','%s','%s','%s','%s','%s','%s',%d,'%s',%d );"%(s0,s1,s2,s3,s4,s5,s6,int(s7),s8,int(s9))
            try:
                # 执行sql语句
                cursor.execute(sql)
                # 提交到数据库执行
                db.commit()
                print("增加成功\n")
                # cursor.execute("select * from bookinfo;")
                # data = cursor.fetchall()
                # print(data)
            except:
                # 如果发生错误则回滚
                db.rollback()
                print('ERROR,AGAIN')
        # 执行sql语句
        elif work=='2':
            a=input('请输入要删除的书籍ISBN号\n')
            sql ="delete from bookinfo where BookISBNId='%s'"%a
            try:
                # 执行sql语句
                cursor.execute(sql)
                # 提交到数据库执行
                db.commit()
                print('删除成功\n')
                # cursor.execute("select * from bookinfo;")
                # data = cursor.fetchall()
                # print(data)
            except:
                # 如果发生错误则回滚
                db.rollback()
                print('ERROR,AGAIN')
        elif work=='3':
            cursor.execute("select BookISBNId from bookinfo;")
            data = cursor.fetchall()
            print("ISBN号如下:",data)
            a = input('请输入要修改的书籍ISBN号\n')
            b=input('请输入想要修改的属性和信息\n').split()
            print(b[0],b[1])
            sql = "update bookinfo set %s=%s where BookISBNId='%s'"%(b[0],b[1],a)
            try:
                # 执行sql语句
                cursor.execute(sql)
                # 提交到数据库执行
                db.commit()
                print('修改成功\n')
                # cursor.execute("select * from bookinfo;")
                # data = cursor.fetchall()
                # print(data)
            except:
                # 如果发生错误则回滚
                db.rollback()
                print('ERROR,AGAIN')
        # 获取返回信息
        # data = cursor.fetchall()
        # print(data)
        elif work=='4':
            print('有以下表:bookinfo、booktypeinfo、cusinfo、managerinfo、orderinfo、repertoryinfo')
            a=input('请输入想要查找的信息\n')
    
            sql="select * from %s"%a
            cursor.execute(sql)
    
            # 获取返回信息
            data = cursor.fetchall()
            print('************************结果如下\n',data)
        # 断开连接
        elif work=='5':
            flag=False
        else:
            cursor.execute("select * from bookinfo;")
            data = cursor.fetchall()
            print(data)
    cursor.close()
    db.close()

     

    展开全文
  • 实验三 数据库系统设计综合实验 1、实验目的 通过实验,使学生掌握数据库系统设计和开发的一般方法,能够设计并实现简单的数据库系统。 2、实验要求 熟悉实验室实验环境,掌握实验预备知识,了解实验中故障排除的...
                                     实验三 数据库系统设计综合实验
    1、实验目的
       通过实验,使学生掌握数据库系统设计和开发的一般方法,能够设计并实现简单的数据库系统。
    2、实验要求
       熟悉实验室实验环境,掌握实验预备知识,了解实验中故障排除的基本方法。实验中根据实验要求完成
    相应的任务,并独立完成实验报告。
    3、实验内容
       设计的数据库系统可从以下题目中选择,但不限定于以下题目,可自由选择。要求独立完成下列系统所需的
    数据库的需求分析、概念结构设计、逻辑结构设计、物理结构设计;任选自己熟悉的数据库管理系统完成
    数据库的搭建。
    4、系统题目参考:
    (1)学生成绩管理系统
    (2)网上书城系统
    (3)进销存系统
    (4)酒店客房管理系统
    (5)图书馆管理系统
    
    
    
    我的选题:同校学生互助问答平台的设计与实现
    说明:实验三的实验报告分成两个文档,但放在同一个Word文档中:
    1、需求分析规格说明书
    2、详细设计文档
    
                                         需求分析规格说明书
    

    项目名称 <同校学生互助问答平台的设计与实现>
    文档类别 <说明>
    文档编号 <128>
    版 本 <V1.0>
    密 级 <秘密>
    二〇二〇年六月二十一日

    目录
    0、修订历史记录……………………………………………………………………………4
    1、导言………………………………………………………………………………………4
    1.1、编写目的………………………………………………………………………………4
    1.2、背景……………………………………………………………………………………5
    1.3、项目范围………………………………………………………………………………5
    1.4、参考资料………………………………………………………………………………5
    2、产品……………………………………….………………………………………………5
    2.1、产品前景………………………………………………………………………………5
    2.2、产品功能………………………………………………………………………………6
    2.3、运行环境………………………………………………………………………….……6
    3、功能性需求…………………………………………………………………………….…6
    3.1、系统功能需求…………………………………………………………………………6
    3.2、用例图…………………………………………………………………………………7
    3.3、用例列表………………………………………………………………………………8
    4、性能……………………………………………………………………………….……10
    4.1、性能需求………………………………………………………………………………10

    在这里插入图片描述

    1、导言

    1.1、	编写目的
    一、
        该文档首先给出项目的整体结构和功能结构概貌,试图从总体架构上给出整个系统的轮廓。同时对功能
    需求、性能需求进行详细的描述。便于用户、开发人员进行理解和交流, 反映出用户问题的结构,可以作为
    软件开发工作的基础和依据以及确认测试和验收的依据。
    二、
    本文档面向的预期读者对象:
    1、项目经理:项目经理可以根据该文档了解预期产品的功能,并据此进行系统设计、项目管理。
    2、设计员:对需求进行分析,并设计出系统,包括数据库的设计。
    3、程序员:了解系统功能,编写《用户手册》。
    4、测试员:根据本文档编写测试用例,并对软件产品进行功能性测试和非功能性测试。
    5、用户:了解预期产品的功能和性能,并与分析人员一起对整个需求进行讨论和协商。 
    在阅读本文档时,首先要了解产品的功能概貌,然后可以根据自身的需要对每一功能进行适当的了解。
    
    1.2、	背景
    1、网上论坛是一种供人们进行交流的网络空间。它不受时间和空间的约束,论坛用户可以发表自己的观点,
    大家一起探讨某个问题。实现用户与用户间的交流,利用网络经济而又快捷地与外界进行各种信息沟通,取得
    更有用的信息资源。目前,网上论坛已不是新事物,许许多多的别具特色的论坛在网络上随处可见。
    2、对当代学生而言,刷论坛更是家常便饭。虎扑,知乎,小红书等论坛都可见他们的身影。男生热衷于篮球、
    球鞋等论坛。女生沉迷于美妆美食服饰等论坛。对于他们而言,在论坛上交流比面对面的交流显得更自在。这
    是当代学生的现状。因此本项目将开发一个互助问答平台,以便学生们线上交流分享经验。
    
    1.3、	项目范围
    该项目要求实现客户前端和管理后端。
    1)客户端主要功能模块:1、个人登录及个人信息资料修改
                  2、搜索、浏览信息
                  3、提问与回答
                  4、纠错与删除、举报
    5、退出登录
    客户端用户为游客的话只有搜索、浏览问答信息和申请下载某文件的功能。
    
    2)管理端主要功能模块:1、登录及团队信息资料修改
                  2、搜索、浏览信息
                  3、管理用户及其问答(警告违规用户与删除违规信息等)
                  4、退出登录
    
    1.4、参考资料
    [1] 韩万江、姜立新.《软件工程案例教程》软件项目开发实践第3版,
    Software Engineering A Case Study Approach ,书号978-7-111-50163-3  机械工业出版社
    [2] 张宇波、王善勤.《基于Java EE的校园问答系统的设计与实现别》,
    文章编号:1671-5993(2014)03-0046-06,[
    Online]Available: https://www.doc88.com/p-5179507306223.html (Sep,2014)
    [3]骑着飞机打乌鸦小组.《师生问答平台网站需求规格说明书》,
     [Online]Available:https://www.cnblogs.com/pirigg/p/10838686.html(May 8,2019)
    

    2、产品

    2.1、产品前景
        伴随着移动互联网的逐步成熟,问答平台的竞争也日益激烈,它们为众多网名搭建了一个强大的信息获取
    交流平台,因此问答平台也越来越受人们关注,比较有影响力的有百度知道、知乎、果壳及若帮等。编者也
    经常去这些平台上帮助网友回答一些关于互联网和心理健康等方面的问题,同事也经常在这些平台上去寻找
    自己需要的知识。
        因此,开发一个同校学生互助问答平台挺现实的,在这个平台上学生们可以有针对性的提问或者分享自己
    的经验,即使没有百度知道的回答那么多元化,没有知乎的答案相对专业化,但在校生在互助问答平台上可以
    更加有专一性地寻找自己需要的问题的答案或者发出关于校园内自己不懂的问题,相信可以很快得到其他用户
    的帮助。网络信息流通突破了时间和空间的限制,满足了学生快节奏生活、提高工作效率、更加深入了解校园
    文化、通过互联网自主学习的需要,同时,实现校园信息资源共享也起着重要作用,也对专业内涵建设具有
    良好的促进作用。
    
    2.2、产品功能
    为了满足学生日常问答的需要,本项目计划阶段完成如下三个核心功能:
    1、在校生的搜索、浏览、提问、回答、删除问答功能
    2、纠错功能,发现有错误的问题或者回答,可直接向用户本身发送纠错信息,同时也可接收别人发来的
    纠错信息。
    3、举报功能,如果提问的话题敏感、不合理,用户可以向管理员举报,管理员收到举报信息后对内容进行
    审核。
    【说明】本项目实现的主要功能也已在导言部分的项目范围中详细写出了。
    
    2.3、	运行环境
    服务器配置如下
    操作系统:Windows XP及以上
    CPU:Intel i5酷睿双核及以上
    内存:8G及以上
    硬盘空间:100G以上
    软件配置如下:
    开发工具:MyEclipse
    数据库:SQL Server
    Web服务器:Tomcat
    
    3、功能性需求
    3.1、系统功能需求:
    1、在校生:可凭借学号和初始密码进行登录平台,可以查看个人资料,搜搜问答信息,提可以发表自己的问题
    ,可以回答其他人的问题,删除自己曾发布的问答信息,举报违规用户,纠错,退出平台等。
    2、管理员:可凭借管理员账号登录平台,查看管理账号信息、搜索问题,删除别人发布的不当内容的信息,
    警告违规用户,处理游客申请,退出平台等。
    3、游客:不允许注册,但可搜索、浏览问答信息,并可申请下载需要的文件。
    

    3.2、用例图
    1)在校生用例图
    在这里插入图片描述
    2)管理员用例图
    在这里插入图片描述
    3)游客用例图
    在这里插入图片描述
    3.3、用例列表
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    4、性能

    4.1、性能需求
    在这里插入图片描述
    在这里插入图片描述

    ①按照规定的格式输入,否则系统提示错误并要求重新输入。
    ②搜索的时候所有包含关键字的记录保证全部搜索到。
    ③程序响应时间在人的感觉和视觉范围内,长时间无响应应提示用户刷新。
    ④每个问题可以有多个用户回答,并且得到相应的处理。
    ⑤能够适应迭代开发。
    ⑥平台的界面要求如下:
    1)页面内容:各类问答信息内容准确,行文格式统一、规范、明确,菜单设置和布局合理,传递的信息准确并
    具有时效性。
    2)导航结构:页面具有明确的导航提示,且便于理解,方便用户使用。
    3)技术环境:页面大小适当,能用各种常用浏览器以不同分辨率浏览,无错误链接和空链接。
    4)艺术风格:界面、版面形象清新悦目、布局合理、字号大小适宜、字体选择合理,前后一致,美观大方,
      色彩和谐自然,与内容相协调。
    ⑦响应时间需求:
        当用户登录时,平台应该及时地进行反应,反应的时间在3秒以内,平台应能检测出各种非正常情况,如与
    设备的通信中断,无法连接数据库服务器等,避免出现长时间等待甚至无响应。
    ⑧可靠性需求
        平台应保证在7*24小时内不宕机,保证1000人以上可以同时在客户端登录,平台正常运行,正确提示相关
    内容。
    ⑨可扩展性要求
        平台设计要求能够体现扩展性要求,以适应将来功能扩展的需求。
    ⑩系统安全性需求:
        平台有严格的权限管理功能,各功能模块需相应的权限方能使用(如在校生、管理员、游客具有不同的
        权限),平台能够防止各类误操作可能造成的数据丢失、破坏。防止用户非法获取网页以及内容。
    



                                          详细设计文档
    

    目录
    1、概念结构设计………………………………………………………13
    1.1、实体属性图………………………………………………………13
    1.2、绘制E-R图…………………………………….…………………18
    2、逻辑结构设计………………………………………………………19
    2.1、数据库表…………………………………………………………19
    2.2、数据库表间关系…………………………………………………23
    3、物理结构设计………………………………………………………25
    3.1、定义及步骤………………………………………………………25
    3.2、设计………………………………………………………………26

    1、概念结构设计

    1.1、实体属性图
    根据需求分析,可以得出以下数据项:
    ①用户管理:用户实体:id、用户名、密码、入学时间、真实姓名、性别、邮箱。
    在这里插入图片描述
    ②管理员管理:管理员实体:管理员id、名称、密码、头像地址、真实姓名、性别、邮箱。
    在这里插入图片描述
    ③回答管理:回答实体:用户id、回答时间、回答字数。
    在这里插入图片描述
    ④提问管理:提问实体:用户id、提问时间、提问字数、备注、手机号、用户邮箱。
    在这里插入图片描述
    ⑤举报管理:举报实体:举报用户id、被举报用户id、举报时间、举报内容、举报原因。
    在这里插入图片描述
    ⑥下载管理:下载实体:下载时间、下载内容、申请下载原因。
    在这里插入图片描述
    ⑦警告管理:警告实体:管理员id、管理员名称、被警告用户id、警告时间、警告原因、备注。
    在这里插入图片描述
    ⑧删除信息管理:删除信息实体:管理员id或用户id、管理员名称或用户名、删除时间、删除内容、删除原因。
    在这里插入图片描述
    ⑨纠错管理:纠错实体:纠错用户id、被纠错用户id、纠错内容、纠错原因、纠错时间。
    在这里插入图片描述
    ⑩搜索管理:搜索记录实体:管理员id或用户id、管理员名称或用户名、搜索时间、搜索内容。
    在这里插入图片描述
    11、角色管理:角色实体:角色id、角色名称、备注。
    在这里插入图片描述

    1.2、绘制E-R图
    E-R图是我们常用的对数据库进行结构设计方法,根据数据库的需求分析进行对实体表结构进行设计,从而确定
    各实体之间的关系。
    (1)数据库表间关系如下:
    1)一个用户可以对应多条回答,但是一个回答只能对应一个用户,所以用户实体和回答实体的关系是1:n;
    2)一个用户可以对应多条提问,但是一个提问只能对应一个用户,所以用户实体和提问实体的关系是1:n;
    3)一个用户可以发起多条举报,但一条举报只能对应一个用户,所以用户实体和举报实体的关系是1:n;
    4)一个用户可以对应多次下载,但一次下载只能对应一个用户,所以用户实体和下载实体的关系是1:n;
    5)一个用户可以对应删除多条信息,但删除一条信息只能由一个用户进行,所以用户实体和删除信息实体的
      关系是1:n;
    6)一个用户可以发送多条纠错信息,一条纠错信息也可由多个用户发起,所以用户实体和纠错实体的
      关系是n:n;
    7)一个用户可以发起多个搜索信息,一个搜索也可由多个用户发起,所以用户实体和搜索实体的关系是n:n;
    8)一个管理员可以接收处理多条举报,但一条举报只能对应一个管理员处理,所以管理员实体和举报实体
      的关系是1:n;
    9)一个管理员可以发出多条警告,但一条警告只能由一个管理员发出,所以管理员实体和警告实体的
      关系是1:n;
    10)一个管理员可以处理多条下载文件的申请,但一条申请只能由一个管理员处理,所以管理员实体和
       下载实体的关系是1:n;
    11)一个管理员可以删除多条信息,但一条信息只能由一个管理员删除,所以管理员实体和删除信息实体
        的关系是1:n;
    12)一个管理员可以发起多个搜索信息,一个搜索也可由多个管理员发起,所以管理员实体和搜索实体
       的关系是n:n;
    13)一个角色可对应多种管理员,但是一个管理员只能对应一种角色,所以角色实体和管理员实体的
       关系是1:n;
    14)一个提问可以对应多条回答,但一条回答只能对应一个提问,所以提问实体和回答实体的关系是1:n;
    
    【说明】因为篇幅原因,此处的同校学生互助问答平台的基本E-R图省略了其中的实体属性的绘制。
    (实体属性图在前面也画过了)
    

    在这里插入图片描述

    2、逻辑结构设计

    2.1、数据库表

    用户表(consumer)记录用户信息,其中主键为用户id(userid),用户名可自定义创建,密码(upassport)是用户身份验证的必要条件。其他一些属性为昵称(unickname)、入学时间(utime)、真实姓名(uname)、性别(usex)、用户邮箱(uemail)。

    在这里插入图片描述
    管理员表(administrators)记录管理员信息,其中主键是管理员id(adid),其中表中的adid属性参照的是角色表(role)中的角色id(rid),密码(adpassport)是管理员身份验证的必要条件。其他属性为名称(adnickname)、头像地址(adadd)、真实姓名(adname)、性别(adsex)、邮箱(ademail)。

    在这里插入图片描述
    超级管理员只有一个,但是可以创建不同权限的普通管理员,所以此角色表(role)记录着不同角色的管理员,角色id(rid)为表的主键,表的角色id(rid)属性被管理员表(administrators)的管理员id(adid)属性所参照。其余属性为角色名称(rname)、备注(rnote)。

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    警告表(warn)记录了管理员警告违规用户的一些信息,其中主键是管理员id(wid)和被警告用户id(wedid),前者参照的是管理员表(administrators)中的管理员id(adid),后者参照的是用户表(consumer)中的用户id(userid),其余属性还有管理员名称(wnickname),此处管理员名称并非外码,不做多加要求,警告时间(wtime)、警告原因(ereason)。

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    2.2、数据库表间关系图
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    3、物理结构设计

    3.1定义及步骤
    物理结构设计是利用已确定的逻辑数据结构以及DBMS提供的方法、技术、以较优的存储结构、数据存取路径、
    合理的数据存储位置以及存储分配,设计出一个高效的、可实现的物理数据库结构。由于数据库的物理结构
    依赖于给定的计算机软件及硬件环境,依赖于所选用的DBMS。因此,设计数据库的物理结构应充分考虑数据库
    的物理环境,例如数据库存取设备、存储组织和存取方法,数据库管理系统及其他辅助性软件工具等通常关系
    数据库的物理结构设计主要包括以下内容:
    (1)确定数据的存取方法
    存取方法是快速存取数据库中的数据的技术,数据库管理系统一般都提供多种存取方法,具体采取哪种存取
    方法由系统根据数据的存储方式来决定,用户一般不能干预。
    用户通常可以利用建立索引的方法来加快数据的查询效率。如果建立了索引,系统就可以使用索引查找方法,
    索引方法实际上就是根据应用要求确定在关系的哪个属性或哪些属性上建立索引,确定在哪此属性上建立
    复合索引,哪些索引要设计为唯一索引以及哪些索引要设计为聚簇索引,聚簇索引是将索引在物理上有序排列
    后得到的索引。需要注意的是,索引一般可以提高查询性能,但会降低数据修改性能。因为在修改数据时,
    系统要同时对索引进行维护,使索引与数据保持 一致。维护索引要占用相当多的时间,而且存放索引信息也会
    占用空间资源 因此在决定是否建立索引时,要权衡数据库的操作,如果查询多,而且对查询的性能要求
    比较高,则要考虑多建一些索引。如果数据更改多,并且对更改的效率要求比较高,则应考虑少建些索引,
    建立索引的原则下,满足以下条件之一的,可以在有关属性上建立索引:
    ①主键和外键上通常建立索引。
    ②如果一个属性经常在查询条件中出现,则考虑在这个属性 上建立索引。
    ③如果一个属性经常作为更大值和更小值等聚集函数的参数,则考虑在这个属性上建立索引。
    ④如果一个属性经常在连接操作的连接条件中出现,则考虑在这个属性上建立索引。
    ⑤对于以查询为主或者只查询的关系表,只要需要且存储空间允许,可以多建索引满足以下条件之一的,
    不宜建立索引。
    ①不出现或者很少出现在查询条件中的属性。
    ②属性值是可能取值的个数很少的属性。
    ③属性值分布严重不均的属性。
    ④经常更新的属性和表。因为在更新属性值时,必须对相应的索引做出修改,这就使系统为维护索引付出较大的
     代价。
    ⑤属性值过长,在过长的属性 上建立索引,索引所占的存储空间比较大,而且索引的级数随之增加,将会带来
     许多不便。
    ⑥太小的表不值得使用索引。
    
    (2)确定数据的存储结构
    物理结构设计中一个重要的考虑因素就是确定数据记录的存储方式。
    常用的存储方式有 :
    ①顺序存储。这种存储方式的平均查找次数。
    ②散列存储。这种存储方式的平均查找次数由散列算法决定。
    ③聚簇存储。这种存储方式是指将不同类型的记录外配到相同的物理区域中,充分利用物理顺序性的优点,提高
     数据访问速度。即将经常在一起使用的记录聚簇在一起,以减少物理输入/输出次数。
    
    总结:
    数据库在物理设备上的存储结构和存取方式称为数据库的物理结构。它依赖于选定的数据库管理系统。为一个
    给定的逻辑数据模型选取一个最适合应用要求的物理结构的过程,就是数据库的物理设计。
    数据库的物理设计通常分为两步:
    (1)确定数据库的逻辑结构,在关系数据库中主要指存取方式和存储结构。
    (2)对物理结构进行评价,评价的重点是时间和空间效率。
        如果评价结果满足原设计要求,则可进入到物理实施阶段,否则,就需要重新设计或修改物理结构,有时
    甚至要返回逻辑设计阶段修改数据模型。
    
    3.2、设计
    (1)确定存取方式
    数据库系统是多用户共享的系统,对同一个关系要建立多条存取路径,才能满足多用户的多种应用要求。物理
    结构设计的任务之一是根据关系数据库管理系统支持的存取方法确定选择哪些存取方法。存取方式是快速存取
    数据库中数据的技术。数据库管理系统一般提供多种存取方式。常用的存取方法为索引方法和聚簇方法。
    此处我的数据库管理系统的很多表会有大量的数据信息且查询操作频繁,因此采用索引方法可以提高数据操作
    效率。但索引的建立和重建及其维护本身代价也挺大,所以应根据不同的表选择合适的存取策略。考虑搜索表
    及删除表等要进行频繁的插入操作,因此可选择建立非聚簇索引来提高操作效率。对于使用频率较低,如下载
    表,则不应该建立索引,因为这会耗费大量维护代价,不值得。
    一般来说关系数据库管理系统都会在建表时自动地建立主码索引,所以有的表可以直接使用主码索引便可尽快
    地找到对应的元组。当然有需要的话也可以再在相应的属性上建立联合索引等,这会更进一步加快存取数据库
    中数据的速度,但同时要考虑到其维护代价。
    

    索引截图:
    在这里插入图片描述
    在这里插入图片描述

    (2)确定存储结构
        为了提高系统性能,应根据应用情况将数据的易变部分与稳定部分,经常存取部分和存取频率较低部分
    分开存放。
    例如,数据库数据备份、日志文件备份等,由于只在故障恢复时才使用,而且数据量很大,可以考虑存放在
    磁带上。可以将比较大的表分别放在两个磁盘上,以加快存取速度,这在多用户环境下特别有效。可以将
    日志文件与数据库对象(表、索引等)放在不同的磁盘以改进系统的性能。
    关系数据库管理系统产品一般都提供了一些系统配置变量和存储分配参数,供设计人员和数据库管理员对
    数据库进行物理优化。
    
    (3)评价物理结构
    数据库物理设计过程中需要对时间效率、空间效率、维护代价和各种用户要求进行权衡,其结果可以产生多种
    方案。评价物理数据库的方法完全依赖于所选用的关系数据库管理系统,主要是从定量估算各种方案的存储
    空间、存取法时间和维护代价入手,对估算结果进行权衡、比较,选择出一个较优的、合理的物理结构。
    一般来说,消除一切冗余数据虽能够节约存储空间和减少维护代价,但往往会导致检索代价的增加,必须进行
    权衡,选择一个折中方案。
    

    数据库原理实验三—实验报告到此结束!希望能多大家有所帮助,如发现错漏可以留言修正或补充,一起进步呀,谢谢!😊

    欲浏览更多博文? 速戳–>大白的博客,欢迎来访噢!😊😊

    展开全文
  • 70W昵称数据库xlsx

    2020-09-25 12:16:17
    70W昵称数据库,70多w个昵称网名,非常实用,欢迎下载70多w个昵称网名 70多w个昵称网名,非常实用,欢迎下载70多w个昵称网名
  • 网名大全.zip

    2019-08-31 10:45:44
    游戏随机名称、机器人名称、QQ、微信个性网名大全 -- xls
  • 数据库.zip

    2019-06-27 23:43:47
    东北大学最新数据库课件,可供考研复试使用,配合《数据库原理》(王珊编著)学习
  • 70w网名库.xlsx

    2021-06-06 13:51:01
    共70万个随机网络昵称/网名,方便程序开发使用。 中文昵称包括大量的网络昵称/网名
  • 数据库名字全解

    2012-11-21 18:19:04
    这是我个人总结的比较全面的数据库的基础名词,对于一些刚入门的新手来说,是很有帮助的哦
  • 李海翔,网名“那海蓝蓝”,腾讯金融云数据库技术专家。中国人民大学信息学院工程硕士企业导师。著有《数据库事务处理的艺术:事务管理和并发访问控制》、《数据库查询优化器的艺术:原理解析与SQL性能优化》、...
  • Redis全称为:Remote Dictionary Server(远程数据服务),由意大利人Salvatore Sanfilippo(网名:antirez)开发,该软件使用C语言编写,Redis是一个key-value存储系统,它支持丰富的数据类型,如:string、list、...
  • 数据库批量起名字

    2020-08-24 22:31:52
    起名字是个比较费文字功底的差事,咱们作为一个理科生,当然要扬长避短。下面看看如果利用数据库来做是什么效果
  • 数据简化DataSimp导读:Google搜索量最大的DB-Engines数据库排名,介绍前几名数据库特点、云AI区块链等数据库服务;展望2018年数据库发展趋势,本文合计40k字详读约需36分钟。最近群里说国内可以重新使用谷歌搜索、...
  • 数据库基础(转载)

    2017-11-09 20:08:41
    数据库基础、
  • 今晚,就在今晚0点,《复仇者联盟4-终局之战》就要首映了!四月什么最难抢?!绝对是《复仇者联盟4》的首映票预售。飙到接近300的票价也难以阻挡漫威粉们的狂热。不知道大家有没有买到票,反正小编是...每一种数据库...
  • 有赞数据库服务实践

    2018-09-14 15:00:00
    特邀嘉宾杨 奇龙(网名:北在南方)任职于杭州有赞科技DBA主要负责数据库架构设计和运维平台开发工作擅长数据库性能调优、故障诊断分享主题周四见|知数堂公开课系列之《有赞数据...
  • 数据库技术

    2017-06-26 22:13:34
    比如一个人的姓名是一个单值属性,而他的网名是多值属性。多值属性在ER图里用双线椭圆表示。 此外,还有 导出属性 ( 派生属性 ),它通过具有相互信赖的属性推导出来,比如一个学生的平均成绩。导出属性在ER...
  • 网名 - 关于网名

    千次阅读 2011-05-05 17:12:00
    很多网名都是来自特定的喜好,或者环境,    我的名字eagle, 完全是来自我的邮箱,当时是公司的HR edna给的 因为当时的邮箱名字正好有5个字母   还有一种case是,从已有的名字...
  • 生产数据库要不要升级与ORACLE数据库产品支持服务内容和时限的问题。
  • 70万个网名昵称大全.7z
  • Redis:REmote DIctionary Server(远程字典服务),是由意大利人Salvatore Sanfilippo(网名:antirez)开发的一款内存高速缓存数据库。 是完全开源免费的,用C语言编写的,遵守BSD协议,高性能的(key/value)分布式...
  • 饿了么数据库架构变迁 Ele 数据架构变迁 目录 自我介绍 开始阶段 阶段一DB升级和扩容 阶段二垂直拆分 阶段三Sharding 阶段四异地容灾 总结 Ele 数据架构变迁 自我介绍 自我介绍 虢guo 国飞网名飞扬过海 DB工作10+ 年...
  • 数据库学习

    千次阅读 2014-04-21 16:28:51
    比如一个人的姓名是一个单值属性,而他的网名是多值属性。多值属性在ER图里用双线椭圆表示。 此外,还有 导出属性 ( 派生属性 ),它通过具有相互信赖的属性推导出来,比如一个学生的平均成绩。导出属性在ER...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,430
精华内容 1,372
关键字:

网名数据库