数据库设计、数据库需求分析、数据库结构设计
一 基本概念
1 数据库设计面对的主要有哪些问题
(1) 懂数据库原理同时懂甲方软件专业知识的人缺少。
(2) 应用的数据库系统的最终目标往往在一开始不能完全明确,与开发者与用户方最初没在要求完全一致有关.
(3) 应用业务系统千差万别的,难以找到一种通用的工具和方法
2 数据库设计特点
(1) 对人员要求,综合性:成熟的开发人员涉及到的知识面,主要包括计算机专业和业务专业知识,要解决技术问题同时,还要去解决许多非技术方面的问题。
(2) 数据库结构设计与动态功能行为是分离的。
结构设计主要包括语义结构(概念性的),数据结构(逻辑性),存储结构(物理数据库)
动态行为设计:基于数据库的应用程序设计(动作操作,功能实现)
3 目前数据库设计主要方法
NEW ORLEANS--新奥尔良方法:一个数据库要成功设计,该流程:
需求分析(形成需求分析,得到说明书)---概念结构设计(概念结构)---逻辑结构设计(形成逻辑结构)----物理设计(生成磁盘上的物理数据库)
整个设计过程都要基于以前理论和范式。
4 常用的数据库设计细节步骤
把新奥尔良方法细化:
需求分析---结构设计—行为功能设计---数据库实施---数据库运行和维护
需求分析:了解用户方的真实需要,纸面化,形成需求说明书
结构设计:主要有概念结构,逻辑结构,物理结构的思考
行为设计:功能设计,事务设计,APP设计
数据库实施:加载数据库,调试运行应用程序
运行和维护:即使软件交付后,在保证期内维护
二 数据库需求分析
是整个设计过程的起点,详细地明确用户方要求,直接影响后面所有阶段。
主要难点:真实完整地明确要求;技术上可能存在难点;
调查用户需求阶段主要包括:对方业务现状,信息源流,外部的其它要求
信息源流:各种数据种类,类型,数据量;各种数据的来源,去向,结点是哪里;各种数据如何产生,修改,查询,更新,使用频率,效率;这些看起来分散的数据在业务如何联系起来?
得到需求报告,过程中常用方法:检查用户方工作中的文档;面谈;观察用户方操作的中业务;甚至研究和问卷调查等
三 数据库结构设计
1数据库设计分类
数据库结构设计(静态描述的东西),数据库行为设计(功能行为,程序设计)
结构设计:数据库概念结构,逻辑结构,物理存储结构
行为设计:数据库的功能组织和流程控制,APP实现
2 概念结构设计(在人脑和纸上体现)常用E-R(实体—联系)
(1)设计局部E-R模型:定义某个功能或小范围内的模型,定义实体,明确实体的联系,各实体的属性(某个或某些表的定义)
(2)设计全局E-R模型:把所有的局部E-R图集成一个全局的E-R
(3)优化全局E-R模型
E-R介绍:
矩形框表示实体表,圆角长方或椭圆表示属性列;
要描述出不同实体之间的联系:1:1, 1:m, m:n
原则:实体个数尽量少,但要满足各范式;一个实体包含的属性列尽量少,但要保证对实体属性列描述清楚。
实体间的联系无冗余。
(要思考平衡各范式与实体集大小关系)
3 E-R模型如何向关系模型转换(数据库的逻辑结构设计概念)
说的是根据E-R图如何得到表的结构;根据E-R描述,设计出逻辑表;
一个实体转换为一个关系模式;实体中的属性就是关系表的列属性,实体中的标识符就是关系表的中的码.
难点在:如何处理实体之间的联系
(1) 两个实体是1:1关系:可直接把E-R图转换为关系模式.
如“学生”实体与“学生籍贯”实体之间是1:1,在转换时,两个实体各自独立转换
把上面的E-R实体“学生”转换为关系模式:
学生(学号 pk, 姓名,性别…)
(2) 实体间是1:m: 如实体“部门”和“职工”是一对多,如何转换为这个E-R到关系模型
部门(部门号 pk,部门名…)
职工(职工号 pk ,部门号 FK ,职工名,工资…)
(3)实体间是m:n ,多对多关系. 如有实体“教师”,“课程”,一个老师可教多门不同课程;一门课程可被不同的多个老师教。这种情况下如何转换为关系模型。
教师(教师号PK,教师名,职称….)
课程(课程号PK,课程名,学分…)
授课(教师号 FK,课程号FK,授课时数……)
说明:在教师表中教师号为主码,在课程表中课程号是主码;在授课表中教师号外键到教师表,课程号外键到课程表;授课表中教师号和课程号组合成主码PK
例:如下E-R如何写出关系模型?
产品(产品号pk,性能参数……)
零件(零件号pk,规格,价格….)
材料(材料号pk,材料类型,库存量,材料参数….)
产品零件(产品号fk,零件号fk,零件个数….)
零件材料(零件号fk,材料号fk,使用量….)
后台数据连接操作的类化,模块化:
应用开发:
MVC:模型-视图-控制器
MVC标准规范,程序要遵守的,通用模型。
模型:实现各个环节交换数据时的类CLASS
视图:给用户最终呈现
控制器:后台程序,如aspx.cs代码或 JAVA的servlet
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
/// <summary>
/// XsModel 的摘要说明
/// </summary>
public class XsModel
{
private string 学号;
private string 姓名;
private int 年龄;
private string 家庭住址;
private float 身高;
public void setXH(string t) { this.学号 = t; }
public string getXH() { return 学号; }
public XsModel()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public XsModel(string xh,string xm,int nl,string jtzz,float sg)
{
学号 = xh;姓名 = xm;年龄 = nl;家庭住址 = jtzz;身高 = sg;
//
// TODO: 在此处添加构造函数逻辑
//
}
}
在注册提交按钮编程:
protected void bt1_Click(object sender, EventArgs e)
{
string xh0 = xh.Text.Trim();
string xm0 = xm.Text.Trim();
XsModel xs = new XsModel(xh0,xm0,0,"",0);
double sg0=1.75;
xs.setsg(sg0);
new Class1().insertIntoTable0("学生表", xs);
}
在数据操作工具类class1中新编写insertintotable0( )方法,实现对任意表,任意模型中的数据插入到数据库表中。
实现了的同学,把代码和运行结果截图发到作业邮箱中,平时成绩加5分
(文件名:学号+姓名+数据库操作工具+模型实现.docx )