软件开发的步骤可大致分为:

1.需求分析

2.系统设计

3.编码实现

4.系统测试

5.运行维护

student class     多对一

sno name age gender cid id  clsname 辅导老师,。。

1  1   1   jd1613  xxx

2  1

系统设计中一个重要的环节就是数据库设计

数据库设计的时候需要先进行数据建模(实体关系图 E-R图)

数据建模的依据就是前期所做的需求分析

数据建模

参照179页的图形:

1.Model of system in client's mind

2.Entity model of client's model

3.Table model of entity model

4.Tables on disk

实体-关系图

实体-关系图(Entity Relationship Diagram),也称为E-R图,提供了表示实体类型、属性和关系的方法,用来描述现实世界的概念模型。

构成E-R图的基本要素是实体、属性和关系

实体(Entity):实体用来表示具有相同特征和性质的事物(类似于java的类(域对象)),实体由实体名和实体属性来表示。

属性(Attribute):实体所具有的某一特性,一个实体可以有若干个属性

关系(Relationship):实体彼此之间相互连接的方式称为关系。一般可分为以下 3 种类型:

一对一关系 (1 ∶ 1)

这种关系比较少见

维护关系:随意选择一方构建外键

例如:Wife and Husband

w1     h1

wife  husband

id name h_id  id name

1   zs   1     1   lisi

一对多关系 (1 ∶ N)

比较常见:

维护关系:在多的一方维护一方的唯一值列作为外键

比如:

student       class

sno sname age c_id id name 老师

1 1 1 jd1612  xx

2 1       1  jd1612 xx

多对多关系 (M ∶ N)

维护关系:构建桥表

student(学生)     course(课程)

sno  sname c_id id    name

1     zs  1  1     yw

2     lis  1  2     music

1     zs  2

student_course_brige

sno    c_id

1      1   primry key(sno,c_id)

1      2

2      1

2      2

may-be 和 must-be

在实体与实体之间的关系中,都会存在着may-be和must-be这俩种情况,例如:

系统中有订单和顾客俩个实体(N:1关系),一个顾客对应多个订单,一个订单对应一个顾客,而且一个顾客可以(may be)没有订单和他对应,一个订单一定(must be)会有顾客和它对应.

ER图中符号的表示

1) #:主要标识

(#):次要标识

2) * : 非空

#*:表示主键。

3) o : 可有可无

4) 虚线: may be  顾客这边虚线,顾客可能没有订单

5) 实线: must be 订单这边实线,订单一定是属于某个客户。

6) 竖杠(|): UID Bar代表要强制在(|)一方建立一个联合主键,将对方ID拿过来做联合主键

简单点说就是外键同时做了当前表的主键

7) 伞状图标代表多的一方,不是伞状图标则代表一的一方

数据库设计

数据建模完成之后,可以把ER图转换成数据中的表

1.实体的名字转换为表的名字

2.实体的属性转换为表中的列

3.具有唯一特点的属性设置为表中的主键

4.根据实体之间的关系设置为表中某列为外键列(主外键关联)

设计关系数据库时,遵从不同的规范要求,才能设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。

目前关系数据库有六种范式:

第一范式(1NF)

第二范式(2NF)

第三范式(3NF)

巴斯-科德范式(BCNF)

第四范式(4NF)

第五范式(5NF,又称完美范式)

注:满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)就行了

第一范式:

一个表中,每个列里面的值是不能再分割的.

例如:我们设计的表中有一个列是:爱好

这个列的值可能会是这样:足球篮球乒乓球

但是这值是可以再分割的:足球、篮球、乒乓球

所以这种设计是不满足第一范式

第二范式:

第二范式是在满足第一范式的基础上

表中的非主键列都必须依赖于主键列

例如:

订单表: 订单编号 是主键

订单编号  订单名称   订单日期  订单中产品的生产地

这几个非主键列中,产品生产地是不依赖于订单编号的,所以这种设计是不满足第二范式

第三范式:

第三范式是在满足第二范式的基础上

表中的非主键列都必须直接依赖于主键列,而不能间接的依赖.

(不能产生依赖传递)

例如:

订单表:   订单编号 是主键

订单编号  订单名称  顾客编号  顾客姓名

顾客编号依赖于订单编号,顾客姓名依赖于顾客编号,从而顾客姓名间接的依赖于订单编号,那么这里产生了依赖传递,所以这个设计是不满足第三范式的

主键和外键

主键:

1.能做主键的列必要满足非空唯一的特点

2.只要满足非空唯一的列都可以做主键

3.可以让表中一个有意义的列做主键,比如说学号,它既表示学生学号又作为表中的主键,因为这个列满足非空唯一的条件

4.也可以找一个没有意义的列做主键,就是用来唯一标识一行记录的

5.我们可以让多个列联合在一起做表中的主键,那么它就是联合主键,要求这几个列的值联合在一起是非空唯一的

外键:

1.表中的某一个列声明为外键列,一般这个外键列的值都会引用于另外一张表的主键列的值(有唯一约束的列就可以,不一定非要引用主键列)

2.另外一张表的主键列中出现过的值都可以在外键列中使用

3.外键列值也可以为空的,提前是这个外键列在表中不做主键,因为我们也可以把表中的外键列当做主键来使用(只有满足非空唯一的要求就可以)

4.如果把B表中的联合主键的值引用到A表中做外键,因为是俩个列在B表中做联合主键,那么A表引用过来的时候也要把俩个列的值都引用过来,那么它们在A表中就会作为一个联合外键出现

完整性约束:

实体完整性:

引用完整性

列级完整性

用户自定义

建表:

1.映射实体----表

2.映射属性----列

3.添加约束

4.描述关系信息(外键)

Oracle软件开发分析的更多相关文章

  1. SaaS系列介绍之十四: SaaS软件开发分析

    1 引言 真正的问题,不是电脑是否具备思考能力,而是人类是否具备这种能力                     ________B.F.Skinner<计算机科学> SaaS模式不同于传 ...

  2. Android音频输入通道的底层硬件和软件开发分析

    Android潜在的发展音频输入通道的软硬件分析 我们都知道耳机Mic集成在一直的那种四段耳机Mic插头是Android设备上比較经常使用.可是也会有分开的情况,比較假设在普通的PC机中装Androi ...

  3. 软件开发中oracle查询常用方法总结

    上次新霸哥和大家讲解了一些关于oracle的知识发现大家对oracle还是比较感兴趣的,下面新霸哥就大家比较关系的oracle中常用的查询有哪几种?做个和oracle相关的开发的朋友可能会知道答案,但 ...

  4. Psp个人软件开发软件需求分析和用例分析

    Psp个人软件开发软件需求分析和用例分析 一.需求分析 1.业务需求 1.1 应用背景 开发项目进度计划总是那么不明确,延期经常出现,甚至无法给出一个相对比较明确的延迟时间.这样给市场的推广会带来很大 ...

  5. .NET软件开发与常用工具清单

    [工欲善其事,必先利其器]软件开发的第一步就是选择高效.智能的工具. 下面列出的工具软件能辅助提高工作效率.  开发类工具 微软.Net平台下的集成开发环境:Visual Studio. Visual ...

  6. 软件开发顶尖高手的杀手锏SQL语句

                  软件开发顶尖高手的杀手锏SQL语句                                                                     ...

  7. SNF软件开发机器人产品白皮书

    软件开发机器人 产品白皮书 使用说明书 模块名称:软件开发机器人 模块编号:12 项目负责人:王金斗 所属部门:技术中心 文档编制: 编制日期:2018-02-02 文档审核:王金斗 审核日期: 文档 ...

  8. java 软件开发面试宝典

    一. Java 基础部分........................................................................................ ...

  9. 减少存储过程封装业务逻辑-web开发与传统软件开发的思维模式不同

    本篇文章讨论并不是:不要使用存储过程,因为有些事情还是要存储过程来完成,不可能不用.而是关于:"业务逻辑是不是要封装在存储过程中实现,这样子php.java等就是调用存储过程". ...

随机推荐

  1. php课程---Json格式规范需要注意的小细节

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 易于人阅读和编写.同时也易于机器解析和生成. 它基于JavaScript Programming Lan ...

  2. HDU 5919 Sequence II(主席树+逆序思想)

    Sequence II Time Limit: 9000/4500 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) To ...

  3. String与StringBuilder之间区别(转)

    当我们在初学使用C#时,常常会不知道该用StringBuilder合适还是用String高效,下面是我在学习当中对StringBuilder和String的区别总结,分享给大家. String类有不可 ...

  4. C++ 扫描文件夹下所有文件

    void GetFilesFromDirectory(std::vector<std::string> &files, const char *directoryPath) { s ...

  5. ES6 module export options 模块导出、导入语法

    http://stackoverflow.com/questions/25494365/es6-module-export-options A year and some later, here is ...

  6. JavaScript特效(调试笔记)

    JavaScript特效 一.在网页上显示当前的时间日期,例如:“2016年3月26日 星期六”. js源代码: function getTime() { var today = new Date() ...

  7. LeetCode Alien Dictionary

    原题链接在这里:https://leetcode.com/problems/alien-dictionary/ 题目: There is a new alien language which uses ...

  8. Pycharm 2016 2 激活

    选其中一款,一个不行换另一个 1. 选License server激活,输入:http://114.215.133.70:41017/ 2. 43B4A73YYJ-eyJsaWNlbnNlSWQiOi ...

  9. lua OOP实现对象的链式调用

    数学中的链式法则 http://sx.zxxk.com/ArticleInfo.aspx?InfoID=164649 链式微分法则:实数运算的链式法则:对数运算的链式法则:平行公理的链式法则:向量运算 ...

  10. mvc ajax dropdownlist onchang事件响应

    <script type="text/javascript"> $("#Cycle").on("change", functio ...