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

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. 对C++下struct 和 类默认继承的认识

    #include <iostream> using namespace std; struct struct1{ int data1 ; double data2 ; struct1(){ ...

  2. openstack组件之keystone

    一 什么是keystone keystone是 OpenStack Identity Service 的项目名称.它在整个体系中充当一个授权者的角色. Keystone项目的主要目的是给整个opens ...

  3. IOS第18天(10,核心动画-转盘,自定义buton,旋转动画)

    *****HMViewController.m #import "HMViewController.h" #import "HMWheelView.h" @in ...

  4. Redis和Memcache对比及选择(转载)

  5. Android 更新sdk

    http://blog.csdn.net/xiao_ping_ping/article/details/45621663 不FQ意味着不能直接到android官网下载android SDK,但是国内有 ...

  6. ios数据库常用sql语句

    SQlite常用语句 由于sql语句在程序代码中以字符串的形式存在,没有代码提示,不细心很容易出错,而且不容易被查出来.sql语句字符串是单引号. 写sql语句的时候一定要细心呀.如果写不好可以找公司 ...

  7. Spring+Mybatis+SpringMVC+Maven+MySql搭建实例

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:本文主要讲了如何使用Maven来搭建Spring+Mybatis+SpringMVC+M ...

  8. MFC实现 自适应操作系统的CListCtrl控件

    新建对话框应用程序,删除自动生成的控件后,拖拽一个CListCtrl控件,绑定变量名为:m_listctrl.在对话框初始化成员函数OnInitDialog()中键入以下代码即可实现自适应系统的CLi ...

  9. 利用Java进行MySql数据库的导入和导出

    利用Java来进行Mysql数据库的导入和导出的总体思想是通过Java来调用命令窗口执行相应的命令. MySql导出数据库的命令如下: mysqldump -uusername -ppassword  ...

  10. 解决Firefox浏览器每次打开都弹出导入向导的问题

    每次打开Firefox浏览器都会弹出导入向导这个页面,只有这个页面关闭后,Firefox界面才会打开. 解决办法: C:\Users\{用户名}\AppData\Roaming\Mozilla\Fir ...