现实世界→需求分析→概念设计→逻辑设计→物理设计
概念设计--利用数据模型进行概念数据库的模式设计。它不依赖任何DBMS(数据库管理系统)常用的数据模型为ERM(实体联系模型),用到的术语有:实体、属性、联系、键。
逻辑设计--把概念设计得到的概念数据库模式变为逻辑数据模式,它依赖于DBMS。用到的术语有:函数依赖、范式、关系分解。
>
如何画数据库ER图
数据库设计中重要的一环首先就是概念设计,也就是说,要从实际问题出发,排除非本质的东西,抽象出现实的数据结构之客观规律——即画出数据结构图——ER图。这是数据库设计的重点,也是数据库设计的难点。
那么,如何才能正确地反映客观现实,将ER图画好呢?
答案是,必须进行正确的需求分析。那么如何进行需求分析呢?需求分析一般有两种方法,一种是结构化分析(SA),一种是面向对象分析(OOA)通过这两种方法的实施以后,都可以得到比较正确的ER图。现在以下面的实际问题为例,通过结构化分析(SA)方法的应用,讲述如何得到比较正确的ER图。
( 一 ) 校务管理系统
在要建立的系统中,有以下功能:
1管理老师的功能:录入老师情况(姓名地址所教课程), 老师缺课记录(名字时间原因 课程)
2管理学生的功能: 录入学生情况 ( 姓名 所选课程 成绩 )
3教务主任的功能 : 查询统计 1: 教师情况 2: 学生总成绩 3: 学生平均成绩
要求:
1)用结构化方法画出系统顶层图、 0 层图,数据字典。
2)画出该系统的数据模型ER图。
一、结构化分析的需求分析
1) 分析实际情况
根据实际情况,我们得到一下情况:
(一)教师任课流程:
(二)学生选择课程流程:
2)画数据流图
(一、)顶层数据流图
(二)0层数据流图
3)画数据字典DD(略)和软件初始结构图
1基本数据=学生基本信息|教师基本信息|课程基本信息|教室基本信息
2教师任课信息=教师任课数据|教师考勤信息
3学生选课请求和成绩=学生选课请求|学生成绩
学生基本信息=学号+姓名+性别+年龄+专业+班级
。。。。。。
1、要了解ER图的核心要素:实体,属性,关系,实体就是一个个对象,比如猫,属性就是实体所有的某个属性,比如猫的性别,关系就是实体和实体之间或者实体内部之间的关系。
2、要了解ER图中怎么表示1中描述的三个核心要素:在ER图中矩形代表实体,椭圆代表属性,菱形代表关系,各个形状之间用线段连接。
3、以同样的方式定义课程实体后建关系表,拖进关系线段,连接两个实体,注意两头都是红色才是真正的连接起来了。会自动在关系属性里建立起连接。
扩展资料:
图书借阅管理系统注意事项:
一个实体型转换为一个关系模式。关系的属性:实体型的属性,关系的码:实体型的码。
一个1:1联系可以转换为一个独立的关系模式,也可以与任何一端对应的关系模式合并。一个1:n联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并。一个m:n联系转换为一个关系模式。
三个或三个以上实体间的一个多元联系可以转换为一个关系模式,具有相同码的关系模式可合并,同一实体集的实体之间的联系即自联系,也可以按1:1,1:n和m:n三种情况分别处理。
参考资料来源:百度百科-图书管理系统
三个表,1买家表(本单位表ID主键)2供应商表(ID主键)
3记录清单表(有买家表的ID,供应商的ID,都是外键)
显示就查3表就可以了,当然也可以创表后创视图加view就是了,要显示的字段就查~
希望能帮助你!打开Visio 2003至程序的主界面,很快我们就可以看到许多预设的画图方案了,在左边的选择绘图类型的类别选项下,选择我们需要的“数据库”这一类型
在选中数据库类别之后,我们可以看到Visio 2003为我们预设了三种常用的数据库画图方案,我们选择双击最常用的“数据库模型图”
这时Visio 2003就进入了画图状态,看到界面的左边,选中“实体”这个画图模型,按住鼠标左键不放,直接拖动到中间的带有标尺的画图区域
接下来主要的工作就放在设置表的属性上了。看到程序主界面窗口下方的属性设置,现在左边的类别选中“定义”,依次输入数据表的物理名称和概念名称,注意如果物理名称和概念名称不一致的话要把键入时同步名称的勾取消掉才行
接来下类别选中“列”,根据实际情况分别填入列的在实际数据库中物理名称,数据类型,是主键的列以及不能为空的列要勾上“PK ”或者“必须的”
如果需要为列的字段添加注释,就选中相应的列之后,点击旁边的“编辑”,出现了列属性的编辑窗口,首先就要把“键入时同步名称”的勾去掉,然后在概念名称处就可以填写自己需要的列字段说明了,填完点“确定”以此为例完成对每一列的属性编辑
所有列编辑完之后,在画图区就可以看到数据库模型图的样子了。可以通过拖动调整整个数据库模型图的大小
8
最后要做的就是把这个数据库模型图保存出来以供使用,点击工具栏的“文件”,然后选择“另存为”,选好保存位置,保存类型可以选择为“jpg”,最后点击“保存”即可把这个画好的数据模型图以jpg的形式保存出来了,十分方便你用什么数据库?在数据库里创建OLE对象,然后把你的文章用二进制写入数据库。
用以下方法来实现:
首先我们先来熟悉一下将要使用的对象方法。我们用来获取上一个页面传递过来的数据一般是使用Request对象。同样的,我们也可以使用Request对象来获取上传上来的文件数据,使用的方法是RequestBinaryRead()。而我们要从数据库中读出来的数据显示到网页上面要用到的方法是:
RequestBinaryWrite()。在我们得到了的数据,要保存到数据库中的时候,不可以直接使用Insert语句对数据库进行 *** 作,而是要使用ADO的AppendChunk方法,同样的,读出数据库中的数据,要使用GetChunk方法。各个方法的具体语法如下:
RequestBinaryRead语法:
variant=RequestBinaryRead(count)
参数
variant
返回值保存着从客户端读取到数据。
count
指明要从客户端读取的数据量大小,这个值小于或者等于使用方法RequestTotalBytes得到的数据量。
RequestBinaryWrite语法:
RequestBinaryWritedata
参数
data
要写入到客户端浏览器中的数据包。
RequestTotalBytes语法:
variant=RequestTotalBytes
参数
variant
返回从客户端读取到数据量的字节数。
AppendChunk语法
将数据追加到大型文本、二进制数据Field或Parameter对象。
objectAppendChunkData
参数
objectField或Parameter对象
Data变体型,包含追加到对象中的数据。
说明
使用Field或Parameter对象的AppendChunk方法可将长二进制或字符数
据填写到对象中。在系统内存有限的情况下,可以使用AppendChunk方法对长整型值进行部分而非全部的 *** 作。
GetChunk语法
返回大型文本或二进制数据Field对象的全部或部分内容。
variable=fieldGetChunk(Size)
返回值
返回变体型。
参数
Size长整型表达式,等于所要检索的字节或字符数。
说明
使用Field对象的GetChunk方法检索其部分或全部长二进制或字符数据。在系统内存有限的情况下,可使用GetChunk方法处理部分而非全部的长整型值。
GetChunk调用返回的数据将赋给“变量”。如果Size大于剩余的数据,则
GetChunk仅返回剩余的数据而无需用空白填充“变量”。如果字段为空,则
GetChunk方法返回Null。
每个后续的GetChunk调用将检索从前一次GetChunk调用停止处开始的数据。但是,如果从一个字段检索数据然后在当前记录中设置或读取另一个字段的值,ADO将认为已从第一个字段中检索出数据。如果在第一个字段上再次调用GetChunk方法,ADO将把调用解释为新的GetChunk *** 作并从记录的起始处开始读取。如果其他Recordset对象不是首个Recordset对象的副本,则访问其中的字段不会破坏GetChunk *** 作。
如果Field对象的Attributes属性中的adFldLong位设置为True,则可以对该字段使用GetChunk方法。
如果在Field对象上使用Getchunk方法时没有当前记录,将产生错误3021(无当前记录)。
接下来,我们就要来设计我们的数据库了,作为测试我们的数据库结构如下(access2000):
字段名称 类型 描述
id 自动编号 主键值
img OLE对象 用来保存数据
对于在MSSQLServer7中,对应的结构如下:
字段名称 类型 描述
id int(Identity) 主键值
img image 用来保存数据
现在开始正式编写我们的纯ASP代码上传部分了,首先,我们有一个提供给用户的上传界面,可以让用户选择要上传的。代码如下
(uploadhtm):
<html>
<html>
<body>
<center>
<form name="mainForm" enctype="multipart/form-data" action="processasp" method=post>
<input type=file name=mefile><br>
<input type=submit name=ok value="OK">
</form>
</center>
</body>
</html>
注意enctype="multipart/form-data",一定要在Form中有这个属性,否则,将无法得到上传上来的数据。接下来,我们要在processasp中对从浏览器中获取的数据进行必要的处理,因为我们在processasp中获取到的数据不仅仅包含了我们想要的上传上来的的数据,也包含了其他的无用的信息,我们需要剔除冗余数据,并将处理过的数据保存到数据库中,这里我们以access2000为例。具体代码如下(processasp):
<%
responsebuffer=true
formsize=requesttotalbytes
formdata=requestbinaryread(formsize)
bncrlf=chrB(13)&chrB(10)
divider=leftB(formdata,clng(instrb(formdata,bncrlf))-1)
datastart=instrb(formdata,bncrlf&bncrlf)+4
dataend=instrb(datastart+1,formdata,divider)-datastart
mydata=midb(formdata,datastart,dataend)
set connGraph=serverCreateObject("ADODBconnection")
’connGraphConnectionString="driver={MicrosoftAccessDriver(mdb)};DBQ="&serverMapPath("imagesmdb")&";uid=;PWD=;"
connGraphConnectionString="Provider=MicrosoftJetOLEDB40;Data Source=" & ServerMapPath("imagesmdb")
connGraphOpen
set rec=servercreateobject("ADODBrecordset")
recOpen "SELECT FROM images where id is null",connGraph,1,3
recaddnew
rec("img")appendchunk mydata
recupdate
recclose
set rec=nothing
set connGraph=nothing
%>
好了,这下我们就把上传来的保存到了名为imagesmdb的数据库中了,剩下的工作就是要将数据库中的数据显示到网页上面了。一般在HTML中,显示都是使用<IMG>标签,也就是<IMGSRC="路径">,但是我们的是保存到了数据库中,“路径”是什么呢?呵呵,其实这个SRC属性除了指定路径外,也可以这样使用哦:
<IMGSRC="showimgaspid=xxx">
所以,我们所要做的就是在showimgasp中从数据库中读出来符合条件的
数据,并返回到SRC属性中就可以了,具体代码如下(showimgasp):
<%
setconnGraph=serverCreateObject("ADODBconnection")
’connGraphConnectionString="driver={MicrosoftAccessDriver(mdb)};DBQ="&
serverMapPath("imagesmdb")&";uid=;PWD=;"
connGraphConnectionString="Provider=MicrosoftJetOLEDB40;Data Source=" & ServerMapPath("imagesmdb")
connGraphOpen
set rec=servercreateobject("ADODBrecordset")
strsql="selectimgfromimageswhereid="&trim(request("id"))
recopen strsql,connGraph,1,1
ResponseContentType="image/"
ResponseBinaryWrite rec("img")getChunk(7500000)
recclose
set rec=nothing
set connGraph=nothing
%>
注意在输出到浏览器之前一定要指定ResponseContentType="image/",
以便正常显示。
最后要注意的地方是,我的processasp中作的处理没有考虑到第一页(uploadhtm)中还有其他数据,比如<INPUT type=tesxt name=userid>等等,如果有这些项目,你的processasp就要注意处理掉不必要的数据。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)