数据库设计的过程(六个阶段)1需求分析阶段准确了解与分析用户需求(包括数据与处理)是整个设计过程的基础,是最困难、最耗费时间的一步2概念结构设计阶段是整个数据库设计的关键通过对用户需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型3逻辑结构设计阶段将概念结构转换为某个DBMS所支持的数据模型对其进行优化4数据库物理设计阶段为逻辑数据模型选取一个最适合应用环境的物理结构(包括存储结构和存取方法)5数据库实施阶段运用DBMS提供的数据语言、工具及宿主语言,根据逻辑设计和物理设计的结果建立数据库,编制与调试应用程序,组织数据入库,并进行试运行6数据库运行和维护阶段数据库应用系统经过试运行后即可投入正式运行。数据库,容纳数据的仓库,数据库系统,数据库、数据库管理系统、硬件、 *** 作人员的合在一起的总称数据库管理系统,用来管理数据及数据库的系统。数据库系统开发工具,以数据库管理系统为核心,用高级语言开发一套给傻瓜用户使用的数据库应用系统的软件。数据库系统包含数据库管理系统、数据库及数据库开发工具所开发的软件(数据库应用系统数据库管理系统(database management system)是一种 *** 纵和管理数据库的大型软件,是用于建立、使用和维护数据库,简称dbms。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。用户通过dbms访问数据库中的数据,数据库管理员也通过dbms进行数据库的维护工作。它提供多种功能,可使多个应用程序和用户用不同的方法在同时或不同时刻去建立,修改和询问数据库。它使用户能方便地定义和 *** 纵数据,维护数据的安全性和完整性,以及进行多用户下的并发控制和恢复数据库。
procedure就是过程
像这样的语句执行成功后,就会创建一个过程
create
or
replace
procedure
a_test
(
)
as
begin
select
from
dual;
end;
按照规范的设计方法,一个完整的数据库设计一般分为需求分析、概念结构设计、逻辑结构设计、数据库物理设计、数据库的实施、数据库运行与维护六个阶段:各阶段的任务如下:
1、需求分析:分析用户的需求,包括数据、功能和性能需求;
2、概念结构设计:主要采用E-R模型进行设计,包括画E-R图;
3、逻辑结构设计:通过将E-R图转换成表,实现从E-R模型到关系模型的转换;
4、数据库物理设计:主要是为所设计的数据库选择合适的存储结构和存取路径;
5、数据库的实施:包括编程、测试和试运行;
6、数据库运行与维护:系统的运行与数据库的日常维护。:数据库设计(DatabaseDesign)是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效地存储数据,满足各种用户的应用需求(信息要求和处理要求)。在数据库领域内,常常把使用数据库的各类系统统称为数据库应用系统。数据库设计是建立数据库及其应用系统的技术,是信息系统开发和建设中的核心技术。由于数据库应用系统的复杂性,为了支持相关程序运行,数据库设计就变得异常复杂,因此最佳设计不可能一蹴而就,而只能是一种\"反复探寻,逐步求精\"的过程,也就是规划和结构化数据库中的数据对象以及这些数据对象之间关系的过程。
你的问题太泛泛了,“MYSQL的程序”你指的是什么?是MYSQL的 存储过程??您最好是具体问题具体问,你这样提问的话大家都不知道你想要什么!
mysql> soure examplesql里的soure写错了应该是source!!!!examplesql是你实现先编辑好的文本内容,内容可以是创建一个数据库,然后再数据库下建立一个或多个数据表,再往表里插入一些记录!!然后再写个存储过程完成一些简单的功能,比如把A表里的内容插入到B表等等(可以加内容存在就修改不存在就插入等判断)!!建立一个SQL文件就是为了方便!!随便举个例子:在D盘根目录下用记事本建立个examplesql文件,内容如下:
CREATE database name ;
use name;
CREATE TABLE a (
user_id int(11) DEFAULT NULL,
name char(11) DEFAULT NULL,
UNIQUE KEY USER_ID (user_id)
);
insert into a (user_id,name) values (1,'aaa'),(2,'bbb');
CREATE TABLE b (
user_id int(11) DEFAULT NULL,
name char(11) DEFAULT NULL,
UNIQUE KEY USER_ID (user_id)
);
insert into b (user_id,name) values (1,'xxx'),(3,'ccc');
DELIMITER $$
DROP PROCEDURE IF EXISTS qq$$
CREATE PROCEDURE qq()
begin
declare p_user_id varchar(6);
declare p_name varchar(6);
declare cursor_flag int default 0;
declare user_nrb cursor for select user_id,name from a;
declare continue handler for sqlstate '02000' set cursor_flag = 1;
open user_nrb;
repeat
fetch user_nrb into p_user_id,p_name;
if not cursor_flag then
if not exists (select from b where user_id=p_user_id) then
insert into b(user_id,name)values(p_user_id,p_name);
else
update b set name=p_name where user_id=p_user_id;
end if;
end if;
until cursor_flag end repeat;
close user_nrb;
end$$
DELIMITER ;
顺序是建立名为name的数据库,其下建立俩表A和B,为A表插入用户1和2,为B表插入用户1,3!!再建立名为QQ的存储过程,功能是把a表的用户导入到B表,如果A的用户号再B里没有直接插入,如果A里的用户号已经在B表里了那就改变B表里相应用户的名字!!大概是这么个过程!!在MYSQL自带的客户端导入刚才建立的examplesql文件,顺序是:开始——程序——MYSQL——MYSQL SERVER51——MYSQL COMMAND LINE CLIENT 窗口里输入ROOT用户密码在光标处输入source d:\examplesql!!最后再执行存储过程,敲call qq;回车!!!
验证方法是敲select from b;回车!!可以发现B表由本来插入的2条记录变成3条记录,而且用户1的名字也从xxx变成aaa了!!!!
希望对你有帮助!另外最重要的是MYSQL有一些很好的图形界面客户端工具,不用这个DOS界面的东西,下载个sqlyog什么的软件装上,基本一启动就会用了的东西!在SQLYOG的界面直接把examplesql里的内容复制过来粘贴后按F5键运行即可!!!
第一步:应用程序把查询SQL语句发给服务器端执行
我们在数据层执行SQL语句时,应用程序会连接到相应的数据库服务器,把SQL语句发送给服务器处理。
第二步:服务器解析请求的SQL语句
SQL计划缓存,经常用查询分析器的朋友大概都知道这样一个事实,往往一个查询语句在第一次运行的时候需要执行特别长的时间,但是如果你马上或者在一定时间内运行同样的语句,会在很短的时间内返回查询结果。原因是:
服务器在接收到查询请求后,并不会马上去数据库查询,而是在数据库中的计划缓存中找是否有相对应的执行计划。如果存在,就直接调用已经编译好的执行计划,节省了执行计划的编译时间。
如果所查询的行已经存在于数据缓冲存储区中,就不用查询物理文件了,而是从缓存中取数据,这样从内存中取数据就会比从硬盘上读取数据快很多,提高了查询效率。数据缓冲存储区会在后面提到。
如果在SQL计划缓存中没有对应的执行计划,服务器首先会对用户请求的SQL语句进行语法效验,如果有语法错误,服务器会结束查询 *** 作,并用返回相应的错误信息给调用它的应用程序。
注意:此时返回的错误信息中,只会包含基本的语法错误信息,例如select 写成selec等,错误信息中如果包含一列表中本没有的列,此时服务器是不会检查出来的,因为只是语法验证,语义是否正确放在下一步进行。
语法符合后,就开始验证它的语义是否正确。例如,表名、列名、存储过程等等数据库对象是否真正存在,如果发现有不存在的,就会报错给应用程序,同时结束查询。
接下来就是获得对象的解析锁,我们在查询一个表时,首先服务器会对这个对象加锁,这是为了保证数据的统一性,如果不加锁,此时有数据插入,但因为没有加锁的原因,查询已经将这条记录读入,而有的插入会因为事务的失败会回滚,就会形成脏读的现象。
接下来就是对数据库用户权限的验证。SQL语句语法,语义都正确,此时并不一定能够得到查询结果,如果数据库用户没有相应的访问权限,服务器会报出权限不足的错误给应用程序,在稍大的项目中,往往一个项目里面会包含好几个数据库连接串,这些数据库用户具有不同的权限,有的是只读权限,有的是只写权限,有的是可读可写,根据不同的 *** 作选取不同的用户来执行。稍微不注意,无论你的SQL语句写的多么完善,完美无缺都没用。
解析的最后一步,就是确定最终的执行计划。当语法、语义、权限都验证后,服务器并不会马上给你返回结果,而是会针对你的SQL进行优化,选择不同的查询算法以最高效的形式返回给应用程序。例如在做表联合查询时,服务器会根据开销成本来最终决定采用hash join,merge join ,还是loop join,采用哪一个索引会更高效等等。不过它的自动化优化是有限的,要想写出高效的查询SQL还是要优化自己的SQL查询语句。
当确定好执行计划后,就会把这个执行计划保存到SQL计划缓存中,下次在有相同的执行请求时,就直接从计划缓存中取,避免重新编译执行计划。
第三步:语句执行
服务器对SQL语句解析完成后,服务器才会知道这条语句到底表态了什么意思,接下来才会真正的执行SQL语句。
此时分两种情况:
如果查询语句所包含的数据行已经读取到数据缓冲存储区的话,服务器会直接从数据缓冲存储区中读取数据返回给应用程序,避免了从物理文件中读取,提高查询速度。
如果数据行没有在数据缓冲存储区中,则会从物理文件中读取记录返回给应用程序,同时把数据行写入数据缓冲存储区中,供下次使用。
说明:SQL缓存分好几种,这里有兴趣的朋友可以去搜索一下。有时因为缓存的存在,使得我们很难马上看出优化的结果,因为第二次执行因为有缓存的存在,会特别快速,所以一般都是先消除缓存,然后比较优化前后的性能表现,这里有几个常用的方法:
1 DBCC DROPCLEANBUFFERS
2 从缓冲池中删除所有清除缓冲区。
3 DBCC FREEPROCCACHE
4 从过程缓存中删除所有元素。
5 DBCC FREESYSTEMCACHE
6 从所有缓存中释放所有未使用的缓存条目。
SQL Server 2005 数据库引擎会事先在后台清理未使用的缓存条目,以使内存可用于当前条目。但是,可以使用此命令从所有缓存中手动删除未使用的条目。
这只能基本消除SQL缓存的影响,目前好像没有完全消除缓存的方案,如果大家有,请指教。
执行顺序:
FROM 子句返回初始结果集。
WHERE 子句排除不满足搜索条件的行。
GROUP BY 子句将选定的行收集到 GROUP BY 子句中各个唯一值的组中。
选择列表中指定的聚合函数可以计算各组的汇总值。
此外,HAVING 子句排除不满足搜索条件的行。
计算所有的表达式;
使用order by对结果集进行排序。
查找你要搜索的字段。
SQL Server查询分析器里有一个叫做”显示实际执行计划”的选项(位于”查询”下拉菜单中)。如果打开了这个选项,那么无论何时在查询分析器中运行一个查询,都会得到一个显示在单独窗口的查询执行计划(以图形的格式)。这个执行计划就是描述了这个语句的执行过程
此外,在SQL Server 2005中,有3个命令可以用来查看关于SQL语句或批处理的查询执行计划的详细信息:SET SHOWPLAN_ALL、SHOWPLAN_TEXT和SET SHOWPLAN_XML。
以上就是关于数据库设计过程包括几个主要阶段哪些阶段独立于数据库管理系统哪些阶段依赖于数据库管理系统全部的内容,包括:数据库设计过程包括几个主要阶段哪些阶段独立于数据库管理系统哪些阶段依赖于数据库管理系统、数据库里什么是过程、数据库的设计一般经过哪几个阶段等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)