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

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. python操作Excel读写--使用xlrd和xlwt

    一.安装xlrd模块 到python官网下载http://pypi.python.org/pypi/xlrd模块安装,前提是已经安装了python 环境. 进入到解压文件路径,输入 setup.py  ...

  2. Total Commander 常用快捷键(并附快捷键大全)

    Total Commander 常用快捷键 喜欢用Total Commander的人,都会记住它的一些快捷键,这会给你的操作带来很大的方便,以下是经常会用到的快捷键,大家可以记住一些自己用得最多的操作 ...

  3. php session_start() 非常慢 问题原因查找

    最近在做东西的时候发现一个问题 有一个接口挂了 ,然后进行测试访问地址的时候,浏览器就一直处于等待响应的状态 怎么访问都不行,只有重启web服务器才行. 如果不重启web服务器进行代码调试,总发现在s ...

  4. swift 2.x学习笔记(一)

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #008400 } p.p2 { margin: 0.0px 0. ...

  5. SHARE NOTHING SHARE EVERYTHING

    http://mp.weixin.qq.com/s?__biz=MjM5ODYwMjI2MA==&mid=2649736156&idx=1&sn=23931f48282f6ef ...

  6. [daily][archlinux][fonts] 在linux下管理字体

    序: linux是社区搞出来, 商业应用也都是服务器场景.社区里又都是技术人员.字体又是细节.而且会英文早成了标配.所以没有很多社区以外的人力来搞字体这个毫无回报的东西. 结果很自然的,装linux桌 ...

  7. 检测PC端和移动端的方法总结(转)

    正在苦逼的实习中,昨天公司让做一个页面,涉及到检测终端的问题,如果是手机设备,就跳转到指定的网页上,以前写响应式布局只要用@media screen来实现布局的差异化适应,但是现在不仅仅是布局,还要针 ...

  8. 我的面经(ing)

    爱立信: C和C++区别 堆和栈的区别 多态性:类的继承 重载与重复声明的区别 大端和小端的概念 一个排序程序(任意) 三次握手过程,优点 为什么UDP没有三次握手 TCP,UDP的区别 五层协议,各 ...

  9. linux查看ssh用户登录日志与操作日志

    linux查看ssh用户登录日志与操作日志 2013-11-01转载   ssh用户登录日志 linux下登录日志在下面的目录里:  代码如下 复制代码 cd /var/log 查看ssh用户的登录日 ...

  10. 解决 Virtual Box 启动 Cannot load R0 module supLoadModule returned VERR_LDR_MISMATCH_NATIVE Failed to register ourselves as a PCI Bus (VERR_MODULE_NOT_FOUND)

    返回 代码:E_FAIL (0x80004005)组件:Console界面:IConsole {8ab7c520-2442-4b66-8d74-4ff1e195d2b6} 原因: 我新建了一个vdi文 ...