×

sql数据库设计案例

sql数据库设计案例(求一份SQL server数据库课程设计报告)

admin admin 发表于2023-09-24 11:51:45 浏览49 评论0

抢沙发发表评论

本文目录

求一份SQL server数据库课程设计报告

2.2需求分析(1)需求分析的任务需求分析的任务是通过详细调查现实世界要处理的对象(组织、部门、企业等),充分了解原系统(手工系统或计算机系统)工作概况,明确用户的各种需求,用通俗的话来讲,就是分析了解用户关心什么,用户需要什么样的结果,然后在此基础上分析和设计新系统的数据库。需求分析的重点是调查、收集与分析用户在数据管理中的信息要求、处理要求、安全性与完整性要求。 信息要求是指用户需要从数据库中获得信息的内容与性质。由用户的信息要求可以导出数据要求,即在数据库中需要存储哪些数据。 处理要求是指用户要求完成什么处理功能,对处理的响应时间有什么要求,处理方式是批处理还是联机处理。 安全性与完整性要求 一是指用户对系统和数据有什么安全性要求,如不同级别的用户具有什么操作权限和使用哪些数据;二是对数据的输入和存储的什么要求,如数据的长度和范围、数据的有效性、一致性和唯一性等。确定用户的最终需求其实是一件很困难的事,这是因为一方面用户缺少计算机知识,开始时无法确定计算机究竟能为自己做什么,不能做什么,因此无法一下子准确地表达自己的需求,他们所提出的需求往往不断地变化。另一方面设计人员缺少用户的专业知识,不易理解用户的真正需求,甚至误解用户的需求。因此设计人员必须与用户不断深入地进行沟通和交流,才能逐步得以确定用户的实际需求。(2)需求分析的基本步骤1.调查与初步分析用户的需求,确定系统的功能边界 ⑴首先调查组织机构情况 ⑵然后调查各部门的业务活动情况 ⑶协助用户明确对新系统的各种要求 ⑷确定新系统的结构和功能边界,确定哪些功能由计算机完成或将来由计算机完成,哪些活动由人工完成。 常用的调查方法有: ⑴跟班作业 ⑵开调查会 ⑶请专人介绍 ⑷询问⑸问卷调查 ⑹查阅记录2.生成数据字典1)数据项条目:数据项是不可再分的数据单位,它直接反映事物的某一特征。2)数据结构条目:反映了数据之间的组合关系。3)数据流条目:数据流是数据结构在系统内传输的路径。4)数据文件条目:数据文件是数据项停留或保存的地方,也是数据流的来源和去向之一。5)处理过程条目。 (3) 案例分析:教学管理系统数据库的需求分析用户的需求具体体现在各种信息的提供、保存、更新和查询上,这就要求数据库的结构能充分满足各种信息的输出和输入。需求分析阶段主要是收集基本数据,确定数据结构及数据处理的流程,组成一份详尽的数据字典,以便为后面的概念设计和逻辑设计打下基础。2.3概念结构设计概念结构设计是对收集来的信息和数据进行分析整理,确定实体、属性及联系,形成独立于计算机的反映用户观点的概念模型。概念设计的重点在于信息结构的设计,它是整个数据库系统设计的关键。(1)概念结构设计的目标和任务概念结构设计的目标是产生反映系统信息需求的数据库概念结构,即概念模式。概念结构是独立于DBMS和使用的硬件环境的。在这一阶段,设计人员要从用户的角度看待数据以及数据处理的要求和约束,产生一个反映用户观点的概念模式,然后再把概念模式转换为逻辑模式。概念模型的表示方法很多,其中最著名、最常用的表示方法为实体-联系方法,这种方法也称为E-R模型方法,该方法采用E-R图描述概念模型。E-R图提供了表示实体、属性和联系的方法,它由以下三个组件构成: 实体---用矩形表示,矩形框内写明实体名。 属性---用椭圆形表示,并用无向边将其与相应的实体连接起来。 联系---用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体连接起来,同时在无向边旁标上联系的类型(1:1、1:n或m:n)。例如教学管理系统中的学生实体与课程实体的E-R图如下图表示: (2)概念结构设计的过程●数据抽象概念结构是对现实世界的一种抽象,所谓抽象就是对实际的人、事、物和概念进行加工处理,抽取所关心的共同特性,用各种概念精确的加以描述,组成某种模型。在需求分析中,已初步得到了有关各类实体、实体间的联系以及描述它们性质的数据元素,统称数据对象。在这一阶段中,首先要从以上数据对象中找出:系统有哪些实体?每个实体有哪些属性?哪些实体间存在联系?每一种联系有哪些属性?然后就可以做出系统的局部E-R模型和全局E-R模型。● 局部E-R模型设计局部E-R模型设计是从数据流图出发确定实体和属性,并根据数据流图中表示的对数据的处理、确定实体之间的联系。设计局部E-R图的步骤是:1.确定实体类型和属性实体和属性之间没有严格的区别界限,但对于属性来讲,可以用下面的两条准则作为依据:1)作为属性必须是不可再分的数据项,也就是属性中不能再包含其他的属性。2)属性不能与其他实体之间具有联系。2.确定实体间的联系依据需求分析结果,考察任意两个实体类型之间是否存在联系,若有,则确定其类型(一对一,一对多或多对多)。3.画出局部E-R图确定了实体及实体间的联系后,可用E-R图描述出来。形成局部E-R图之后,还必须返回去征求用户意见,使之如实地反映现实世界,同时还要进一步规范化,以求改进和完善。每个局部E-R图必须满足:(1)对用户需求是完整的。(2)所有实体、属性、联系都有惟一的名字。(3)不允许有异名同义、同名异义的现象。● 全局E-R模型的设计各个局部E-R模型建立好后,还需要对它们进行合并,集成为一个整体的数据概念结构,即总E-R图。在合并全局E-R模型时,应注意检查和消除属性、命名的冲突及数据冗余。(3)案例分析:教学管理系统数据库的概念结构设计通过上面的需求分析,就可以进行数据库的概念结构设计,先对现实当中的人、事、物和概念进行抽象的加工处理,抽取所关心的共同特性,用各种概念进行描述,从中找出能够满足用户需求的各种实体,以及它们之间的关系,并用实体-联系图表示出来(即画出E-R图),为后面的逻辑结构设计打下基础。1、确定实体及其属性经过对人工进行的教学管理系统的业务调查,得知系统主要涉及以下几个实体:● 学生实体:属性主要包括班级名称、学号、姓名、性别、出生日期、民族、政治面貌、来源地、入学成绩、学生类别、电话、备注等。● 教师实体:属性主要包括教师号、教师姓名、性别、出生日期、所在系、职称● 班级实体:属性主要包括系部名称、班级号、班级名称、班主任、学生人数、备注等。● 系部实体:属性主要包括系号、系部名称、班级数等。● 课程实体:属性主要包括课程号、课程名、考核方式、学分、学时数等。2、确定实体之间的联系 2.4 逻辑结构设计(1)逻辑结构设计的目标和任务逻辑结构设计的目标就是把概念结构设计阶段设计好的E-R图转换为特定的DBMS所支持的数据模型(即层次、网状、关系模型之一),并对其进行优化。概念模型向逻辑模型的转换过程分为3步进行:(1)把概念模型转换为一般的数据模型。(2)将一般的数据模型转换成特定的DBMS所支持的数据模型。(3)通过优化方法将其转化为优化的数据模型。(2) 概念模型转换为一般的关系模型1.实体的转换规则将E-R图中的每一个常规实体转换为一个关系,实体的属性就是关系的属性,实体的码就是关系的码。2.实体间联系的转换规则1)一个1:1联系可以转换为各自独立的关系模式,也可以与任意一端所对应的关系模式合并。 2)一个1 : n联系可以转换为各自独立的关系模式。3)一个m : n联系转换为一个关系模式。转换的方法为:与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,新关系的码为两个相连实体码的组合(3) 案例分析:教学管理系统数据库的逻辑结构设计逻辑结构设计的任务是把概念结构设计阶段设计好的E-R图转换为特定的DBMS所支持的数据模型(即层次、网状、关系模型之一),并对其进行优化,得到满足用户要求和系统功能需求的关系模式。1、 E-R模型转换为关系模式将E-R模型转换成初始关系模式的一般规则是:系统中各个实体转换为对应的关系模式;实体之间多对多的联系也转换为关系模式。根据转换规则,可以将系部、班级、学生、教师、课程五个实体转换成与之对应的五个关系模式;而将学生与课程两者之间多对多的选修关系以及教师、班级和课程三者之间多对多的开课关系也转换为关系模式。2、关系模式的设计根据上述的转换结果,在对关系模式中数据进行规范化处理后,得到了符合第三范式的关系模式如下:学生:{学号、姓名、性别、出生日期、民族、政治面貌、来源地、入学成绩、学生类别、班级名称、电话、备注}班级:{班级号、班级名称、班主任、学生人数、系部名称、备注}系部:{系号、系部名称、班级数}教师:{教师号、教师姓名、性别、出生日期、所在系、职称}课程:{课程号、课程名、考核方式、学分、学时数}选修:{学号、课程号、成绩}开课: {教师号、班级名称、课程号、开课学期、授课地点}每个关系模式中带下划线的属性或属性的组合表示主键、带双波浪线的属性表示与之关联的表的外键。根据系统功能需求,数据采用SQL Server 2000所支持的实际数据模型,也就是数据库的逻辑结构。启动SQL Server 2000,创建一个数据库命名为:jxgl。该数据库中各个数据表的结构如下面各个表格所示。每个表格对应于数据库中的一个表。3、将关系模式转换为数据库中的表按照关系数据模型的结构,将关系模式转换为关系数据库中的数据表,转换的规则是:一个关系模式转换为一个数据表,关系模式中的每个属性转换为数据表中的一个列。同时设置表中各个列的名称、数据类型、数据宽度以及数据规则,得到如下几个表:学生表(student)列名 类型 宽度 规则班级名称 CHAR 20 内容取自班级信息表的班级名称学号 CHAR 10 主键、长度为10个字符姓名 CHAR 8 性别 CHAR 2 非空、只能取“男”或“女”出生日期 DATETIME 民族 CHAR 4 假定只能取以下之一:汉、壮、白、回、苗、满、其它政治面貌 CHAR 4 只能取以下之一:党员、团员、群众来源地 CHAR 10 入学成绩 INT 学生类别 CHAR 10 假定只能取以下之一:本科、大专(普)、大专(业)、中专、技校、函授、其它电话 CHAR 11 备注 CHAR 10 注:(1)该表存放全校所有学生的基本信息,每个学生产生一条记录。 (2)学号的前4位表示年级,第5--8位表示班级号(其中第5-6位表示系号, 第7-8位表示系内班级号),最后两位是班内的学生编号,在输入记录内容时应加以区分。班级表(class)列名 类型 宽度 规则系部名称 CHAR 10 非空、内容取自系部信息表的系部名称班级号 CHAR 4 非空、长度为4个字符班级名称 CHAR 20 主键班主任 CHAR 8 学生人数 INT 备注 CHAR 10 注:(1)该表存放全校所有班级的信息,每个班级产生一条记录。(2)班级号的前2位表示系号,后两位为系内的班级编号,在输入记录内容时应加以区分。系部表(department)列名 类型 宽度 规则系号 CHAR 2 非空、长度为2个字符系部名称 CHAR 10 主键班级数 INT 注:该表存放某校所有的系部信息,每个系部产生一条记录。教师表(teacher)列名 类型 宽度 规则教师号 CHAR 4 主键、长度为4个字符姓名 CHAR 8 性别 CHAR 2 非空、只能取“男”或“女”出生日期 DATETIME 职称 CHAR 6 只能取以下之一:教授、副教授、讲师、助教、其他所在系 CHAR 20 非空、外键(内容取自系部表的系部名称)课程表(course)列名 类型 宽度 规则 课程号 CHAR 4 主键、长度为4个字符 课程名 CHAR 20 考核方式 CHAR 4 假定只能取以下之一:考试、考查、其他学分 INT 非空学时数 INT 注:该表存放某校所有的课程信息,每门课产生一条记录。成绩表(SC)列名 类型 宽度 规则 学号 CHAR 8 主键、内容取自学生信息表的学生姓名 课程号 CHAR 20 主键、内容取自课程信息表的课程名称成绩 INT 注:该表存放某校所有学生的成绩信息,每个学生学习每门课程产生一条记录。开课信息表(tcc)列名 类型 宽度 规则教师号 CHAR 4 主键、内容取自教师信息表的教师号课程号 CHAR 4 主键、内容取自课程信息表的课程号班级号 CHAR 4 主键、内容取自班级信息表的班级号开课学期 CHAR 20 授课地点 CHAR 20 注:该表存放某校开设课程的信息,每个教师教授某个班级的某门课产生一条记录。2. 5 物理设计数据库的物理设计目标是在选定的DBMS上建立起逻辑设计结构确立的数据库结构,这一过程也称为数据库的物理实现。它主要包括两项工作:一是根据数据库的结构、系统的大小、系统需要完成的功能及对系统的性能要求,决定选用哪个数据库管理系统。目前,数据库产品市场上比较好的产品有:Microsoft SQL Server、Oracle、IBM DB/2,SYBASE等。二是根据选用的数据库管理系统的数据库实现方法来建立用户数据库,即创建所需要的数据库、表及其他数据库对象。 本系统选用的DBMS是SQL Server 2000,并在该系统上创建用户数据库jxgl以及下属的7个用户表:student、class、department、teacher、course、sc、tcc,各个表的结构按2.4节第3点各表给出的具体内容设定。2. 5 实训二以小组讨论的形式,完成人事工资管理系统用户数据库的设计,要求个人写出用户数据库设计的文档(包括数据库的需求分析、概念设计、逻辑设计和物理设计,表达方法可参考本章相应内容的案例分析部分),每个小组上交一份本系统用户数据库包括的数据表。第三章 数据库的数据完整性设计3.1数据完整性的基本概念及内容正确创建数据库后,需要考虑数据的完整性、数据的安全性等要求。数据的完整性主要指数据的正确性、有效性、相容性,强制实施数据完整性可以确保数据库中的数据的质量。进行数据完整性设计主要考虑以下几个方面的内容:1)表名惟一;由系统强制实施控制。2)列名惟一;()由系统强制实施控制。3)数据行惟一;通过设置主键约束或触发器来实施控制。4)列值非空;通过设置非空约束来实施控制。5)列值惟一性通过设置惟一约束或惟一索引来实施控制。6)列值满足一定的条件通过设置检查约束或触发器来实施控制。7)数据的一致性和有效性通过设置外键约束或触发器来实施控制。至于具体要对数据库的哪一个表的哪一项数据进行什么样的数据完整性设计,还应根据用户的需求来考虑和确定。3.2 数据完整性的分类与实现方法在SQL Server关系数据库中,数据完整性分为以下三类:1. 域完整性域完整性是指一个列的输入有效性,是否允许空值。实现域完整性的方法主要有:限制数据类型(通过设定列的数据类型)、限定格式(通过CHECK约束和规则)或可能值的范围(通过 FOREIGN KEY 约束、CHECK 约束、DEFAULT定义、NOT NULL定义和规则)以及程序控制。2. 实体完整性实体完整性是指保证表中所有的行唯一。实现实体完整性的方法主要有:索引、UNIQUE约束、PRIMARY KEY约束或 IDENTITY属性以及程序控制。3. 参照完整性参照完整性也叫引用完整性。参照完整性确保主键(被引用表)和外键(引用表)之间的参照关系。它涉及两个或两个以上表数据的一致性维护。如student表(称为引用表、参照表或子表)的class_id列就是参照class表(称为被引用表、被参照表或父表)的外键。参照完整性可以实现以下两种控制:(1)存在外键时,被参照表中的这一行不能被删除,主键值也不能改变 (以student和class表的“班级名称”列为例说明)。 (2)若在被参照表中不存在包含相应主键的行时,一个外键值不能插入参照表中(MsgBox “添加记录成功!“, vbOKOnly + vbInformation, “提示“End SubPrivate Sub Command5_Click()rs.CloseUnload MeEnd SubPrivate Sub Form_Load()rs.CursorLocation = adUseClient ’ 设置在客户端创建游标rs.CursorType = adOpenKeyset ’设置游标类型为键集类型rs.LockType = adLockOptimistic ’设置打开记录集时的锁定类型为乐观锁,在执行UPdate方法前不锁定的数据rs.Open “select * from teacher“, cnn’在表格上显示class表的记录内容Set DataGrid1.DataSource = rsDataGrid1.Refresh’将表格上的数据与文本框或下拉列表框绑定Set Text1.DataSource = rsText1.DataField = “教师号“Set Text2.DataSource = rsText2.DataField = “姓名“Set Combo1.DataSource = rsCombo1.DataField = “所在系“Set Text3.DataSource = rsText3.DataField = “出生日期“Set Text4.DataSource = rsText4.DataField = “从教日期“Set Combo2.DataSource = rsCombo2.DataField = “性别“Set Combo3.DataSource = rsCombo3.DataField = “职称“Set Combo4.DataSource = rsCombo4.DataField = “政治面貌“Set Combo5.DataSource = rsCombo5.DataField = “学历“Set Text7.DataSource = rsText7.DataField = “家庭住址“Set Text5.DataSource = rsText5.DataField = “联系电话“Set Text6.DataSource = rsText6.DataField = “备注“’下拉列表框提供班级名称Combo1.Clearrs1.Open “select 系部名称 from department“, cnnWhile Not rs1.EOF()Combo1.AddItem Trim(rs1.Fields(“系部名称“))rs1.MoveNextWendrs1.CloseEnd Sub对其余几个表的数据进行增、删、改操作的窗体的设计方法与上述类拟。

求SQL数据库设计实例~

$留个标记,绝对救急$带着你的问题和Email来找我,$如有进一步需求 ,可以与我们取得联系,祝你顺利毕业.----此回复针对所有需要此源码的页面访问和围观者有效.$带着你的问题和Email来找我,

SQL小型数据库系统设计

--------------创建数据库--------------------------create database bankDBon primary( name = ’bankDB’, filename = ’e:\bank\bankDB.mdf’, size = 3MB, maxsize = 100MB, filegrowth = 15%)log on ( name = ’bankDB_log’, filename = ’e:\bank\bankDB_log.ldf’, size = 2MB, filegrowth = 1MB)go--------------------创建数据表---------------------use bankDB gocreate table userInfo( customerID int identity(1,1) not null, customerName varchar(10) not null, PID char(18) not null, telphone char(13) not null, adress varchar(100))alter table userInfo add constraint PK_customerID primary key(customerID)alter table userInfo add constraint CK_PID check(PID like ’’ or PID like ’X’ or PID like ’’)alter table userInfo add constraint CK_telphone check(telphone like ’13’ or telphone like ’-’)alter table userInfo add constraint DF_telphone default(’地址不详’) for adressalter table userInfo add constraint UQ_PID unique(PID)create table cardInfo( cardID char(19) not null, curType varchar(5) not null, savingType varchar(6) not null, openDate datetime not null, openMoney money not null, balance money not null, pass char(6) not null, IsReportLoss char(2) not null, customerID int not null)alter table cardInfo add constraint FK_customerID foreign key(customerID) references userInfo(customerID)alter table cardInfo add constraint PK_cardID primary key(cardID)alter table cardInfo add constraint DF_openDate default(getdate()) for openDatealter table cardInfo add constraint DF_pass default(’888888’) for passalter table cardInfo add constraint DF_curType default(’RMB’) for curTypealter table cardInfo add constraint CK_openMoney check(openMoney 》 1)alter table cardInfo add constraint CK_balance check(balance 》 1)alter table cardInfo add constraint CK_pass check(pass like ’’)alter table cardInfo add constraint DF_cardID default(’1010 3576 ’ + convert(varchar(4),convert(int,rand()*10000)) + ’ ’ +convert(varchar(4),convert(int,rand()*10000))) for cardIDalter table cardInfo add constraint DF_IsReportLoss default(’否’) for IsReportLossalter table cardInfo add constraint CK_IsReportLoss check(IsReportLoss like ’是’ or IsReportLoss like ’否’)alter table cardInfo add constraint CK_savingType check(savingType like ’定期’ or savingType like ’活期’ or savingType like ’定活期’)create table transInfo( transDate datetime not null, cardID char(19) not null, transType char(4) not null, transMoney money not null, remark varchar(100))alter table transInfo add constraint DF_transDate default(getdate()) for transDatealter table transInfo add constraint FK_cardID foreign key(cardID) references cardInfo(cardID)alter table transInfo add constraint CK_stransType check(transType like ’存入’ or transType like ’支取’)alter table transInfo add constraint CK_transMoney check(transMoney 》 0)go--------------------创建开户用户卡信息视图---------create view v_cus as select customerName, cardID,curType,savingType,telphone,adress from cardInfo inner join userInfo on cardInfo.customerID = userInfo.customerID where datediff(wk,openDate,getdate()) = 0-----------------------修改密码--------------------create proc changePWD @cardID char(19), @newpwd char(6), @oldpwd char(6) = ’888888’as declare @temppwd int if((select count(*) from cardInfo where cardID = @cardID) = 0) begin print ’您输入的卡号不存在!’ return end select @temppwd = pass from cardInfo where cardID = @cardID if(@temppwd = @oldpwd) begin update cardInfo set pass = @newpwd where cardID = @cardID if(@@error = 0) print ’密码修改成功!’ else print ’密码修改失败!’ end else print ’您输入的原始密码不对,不能修改密码!’----------------------银行卡挂失-------------------create proc ReportLoss @cardID char(19), @PID char(18)as if((select count(*) from cardInfo where cardID = @cardID) = 0) begin print ’您输入的卡号不存在!’ return end if((select IsReportLoss from cardInfo where cardID = @cardID) = ’是’) begin print ’该卡已挂失!’ return end if((select PID from userInfo where customerID = (select customerID from cardInfo where cardID = @cardID)) = @PID) begin update cardInfo set IsReportLoss = ’是’ where cardID = @cardID if(@@error = 0) print ’挂失成功!’ else print ’挂失失败!’ end else begin print ’您输入的身份证错误!不能挂失!’ return end----------------------取消银行卡挂失-------------------create proc CancelReportLoss @cardID char(19), @PID char(18)as if((select count(*) from cardInfo where cardID = @cardID) = 0) begin print ’您输入的卡号不存在!’ return end if((select IsReportLoss from cardInfo where cardID = @cardID) = ’否’) begin print ’该卡没有挂失!不能进行此项操作!’ return end if((select PID from userInfo where customerID = (select customerID from cardInfo where cardID = @cardID)) = @PID) begin update cardInfo set IsReportLoss = ’否’ where cardID = @cardID if(@@error = 0) print ’取消挂失成功!’ else print ’取消挂失失败!’ end else begin print ’您输入的身份证错误!不能取消挂失!’ return end----------------------统计银行的资金流通余额和盈利结算--------------------create proc StatMoneyas select ((select sum(transMoney) as 资金流通余额 from transInfo where transType like ’存入’) - (select sum(transMoney) as 资金流通余额 from transInfo where transType like ’支取’)) as 资金流通余额 select ((select sum(transMoney) as 资金流通余额 from transInfo where transType like ’存入’)*0.008 - (select sum(transMoney) as 资金流通余额 from transInfo where transType like ’支取’)*0.003) as 盈利结算 ---------------------查询本周开户的卡号,显示该卡的信息-------------------create proc SearchNewCusas print ’本周开户卡号信息’ select * from v_cus -----------------------查询本月交易金额最高的卡号-------------------------create proc SearchHighas select top 1 cardID, sum(transMoney) as 交易金额 from transInfo group by cardID------------------------------查询挂失帐号的客户信息----------------------create proc SearchLossCusas print ’挂失帐号客户信息’ select * from userInfo where customerID = (select customerID from cardInfo where IsReportLoss = ’是’)--------------------------催款提醒业务------------------------------------create proc Awokeas select telphone, balance, customerName, cardID from cardInfo inner join userInfo on cardInfo.customerID = userInfo.customerID where balance 《 200-------------------------银行开户-----------------------------------------create proc OpenUser @curType varchar(5), @savingType varchar(6), @openMoney money, @PID char(18), @telphone char(13), @customerName varchar(10)as begin tran OpenU declare @tag int declare @tempID varchar(10) set @tag = 0 insert into userInfo (customerName,PID,telphone) values (@customerName, @PID, @telphone) set @tag = @tag + @@error if(@tag = 0) set @tempID = (select customerID from userInfo where PID = @PID) insert into cardInfo (curType, savingType, openMoney, balance, customerID) values (@curType, @savingType, @openMoney, @openMoney, @tempID) set @tag = @tag + @@error if(@tag = 0) begin print ’开户成功!’ commit tran end else begin print ’开户失败!’ rollback tran end-----------------------------客户存款-------------------------------------create proc SaveMoney @cardID char(19), @transMoney money, @transType char(4) = ’存入’as if((select IsReportLoss from cardInfo where cardID = @cardID) = ’是’) begin print ’该卡已挂失!无法对其进行操作!’ return end begin tran Saving declare @tag int set @tag = 0 insert into transInfo (cardID, transType, transMoney) values (@cardID, @transType, @transMoney) set @tag = @tag + @@error update cardInfo set balance = balance + @transMoney where cardID = @cardID set @tag = @tag + @@error if(@tag = 0) begin print ’存款成功!’ commit tran end else begin print ’存款失败!’ rollback tran end ------------------------------客户取款------------------------------------create proc DrawMoney @cardID char(19), @transMoney money, @transType char(4) = ’支取’as if((select IsReportLoss from cardInfo where cardID = @cardID) = ’是’) begin print ’该卡已挂失!无法对其进行操作!’ return end begin tran Drawing declare @tag int set @tag = 0 insert into transInfo (cardID, transType, transMoney) values (@cardID, @transType, @transMoney) set @tag = @tag + @@error update cardInfo set balance = balance - @transMoney where cardID = @cardID set @tag = @tag + @@error if(@tag = 0) begin print ’取款成功!’ commit tran end else begin print ’取款失败!’ rollback tran end----------------------------转帐------------------------------------------create proc Transfer @cardID_out char(19), @cardID_in char(19), @tranMoney moneyas if((select count(*) from cardInfo where cardID = @cardID_out or cardID = @cardID_in) 《》 2) begin print ’请确认两张卡是否都存在!’ return end if((select IsReportLoss from cardInfo where cardID = @cardID_out) = ’是’) begin print @cardID_out + ’该卡已挂失!无法对其进行操作!’ return end if((select IsReportLoss from cardInfo where cardID = @cardID_in) = ’是’) begin print @cardID_in + ’该卡已挂失!无法对其进行操作!’ return end begin tran TransMoney declare @tag int set @tag = 0 update cardInfo set balance = balance - @tranMoney where cardID = @cardID_out set @tag = @tag + @@error update cardInfo set balance = balance + @tranMoney where cardID = @cardID_in set @tag = @tag + @@error if(@tag = 0) begin print ’转帐成功!’ commit tran end else begin print ’转帐失败!’ rollback tran end

SQL SERVER数据库课程设计实例(产品质量管理系统)C语言编写的

一般来讲,如果你想在网页里面直接写存储过程,应该是不可以。存储过程需要在SQL Server中先编译才能执行。扩展存储过程例外。======================================================================存储过程分为:系统存储过程、扩展存储过程和用户定义的存储过程扩展存储过程,是以C语言等编写的外部程序,以动态链接库(Dll)形式存储在服务器上,SQL Server可以动态装载并执行它们。编写好扩展存储过程后,固定服务器角色(sysadamin)成员即可在Sql Server服务器上注册该扩展存储过程,并将它们的执行权限授权其他用户。扩展存储过程只能添加到Master数据库。

sql数据库XX系统的设计实例

我这里有个现成的,简单的图书管理系统数据库。数据库名称:BookManager 图书信息表(BookInfo)字段名称类型是否为空(Y/N)说明BookID编号Int(4)N主键BookName书的名称Varchar(50)NBookAuthor作者Varchar(50)NBookTypeID图书的类型Int(4)N外键BookSpec图书规格Varchar(50)YBookConcert出版社Varchar(50)YBookPrice价格doubleNBookCount数量Int(10)NBookDates入库时间DatatimeNBookState图书状态Varchar(20)Y是否已借出BookRemark备注Varchar(100)Yfee费用DoubleN结帐付费图书类型表(BookType)字段名称类型是否为空(Y/N)说明ID编号Int(4)N主键,自动增加TypeName图书类型Varchar(50)N

求sql数据库设计实例

推荐最好的软件分析设计网站:“erp系统分析论坛”“(摆渡搜索) 涉及: ERP解决方案||需求分析||业务建模||系统分析||信息监理;有大量的免费ERP软件资料,还有交易区,提供资源买卖市场; ------ 咨询团 ------

SQL Sever 2005数据库应用实例(如商店管理,公司管理)

线,为读者导航SQL Server 2005从零起步到数据库管理高手的整个路径。全书图文并茂,循序渐进地介绍SQL Server 2005的基本理论、技术体系,同时对于几乎每一个知识点都结合实际例子从应用的角度进行详细讲解。全书分为基础篇、高级篇和应用篇3个部分,共18章,有重点、分层次地讲解SQL Server 2005的基础知识、高级使用技巧和项目应用方法。第1~10章从系统部署技术、基本操作方法、数据库理论基础及其在SQL Server 2005中的实现、T-SQL使用技巧、SQL Server 2005数据库管理的深入、命令提示工具的妙用、打造安全的数据库系统的技巧、数据库的备份和恢复、SQL Server Profiler对数据库的跟踪、数据库引擎优化顾问的使用等方面为读者打造一个学习SQL Server 2005的坚实基础平台。第11~16章讲述XML与SQL Server 2005的配合使用、全文搜索的使用、SQL Server复制的运用、Service Broker处理异步消息的方法、通知服务的使用、基于VS 2005的CLR使用技巧等高级技术的使用细节。第17、18章则从数据库应用的角度讲解基于SQL Server 2005的小型HR开发过程和SSIS、SSAS、SSRS协同实现商务智能的方法。本书配套源文件请到的“下载专区”下载。本书良好的结构设计保证了它既可以作为各种数据库培训班和大专院校的数据库教材,又可供各类数据库开发人员参考。另外,站长团上有产品团购,便宜有保证

设计一个SQL数据库

你说的太模糊1.创建数据库 create database 数据库名 例:create database test go 2.使用创建的数据库 use 数据库名 例:use test go 3.创建表 create table 表名(字段名 字符类型 相应约束,字段名 字符类型…) 例:create table test(test1 char(6)primary key,test2 int) go 4.插入数据 insert into 表名(字段名) values(对应数据) 例:insert into test(test1) values(’小白’) insert into test values(’小黑’,16) go 5.查询(符合条件)数据 select 字段名 from表名 where=条件 select test1 from test where test2=16 go 6.删除(符合条件)数据 delete from 表名 where 条件

sql数据库设计

一、数据库设计过程数据库技术是信息资源管理最有效的手段。数据库设计是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,有效存储数据,满足用户信息要求和处理要求。数据库设计中需求分析阶段综合各个用户的应用需求(现实世界的需求),在概念设计阶段形成独立于机器特点、独立于各个DBMS产品的概念模式(信息世界模型),用E-R图来描述。在逻辑设计阶段将E-R图转换成具体的数据库产品支持的数据模型如关系模型,形成数据库逻辑模式。然后根据用户处理的要求,安全性的考虑,在基本表的基础上再建立必要的视图(VIEW)形成数据的外模式。在物理设计阶段根据DBMS特点和处理的需要,进行物理存储安排,设计索引,形成数据库内模式。1. 需求分析阶段 需求收集和分析,结果得到数据字典描述的数据需求(和数据流图描述的处理需求)。 需求分析的重点是调查、收集与分析用户在数据管理中的信息要求、处理要求、安全性与完整性要求。需求分析的方法:调查组织机构情况、调查各部门的业务活动情况、协助用户明确对新系统的各种要求、确定新系统的边界。 常用的调查方法有: 跟班作业、开调查会、请专人介绍、询问、设计调查表请用户填写、查阅记录。分析和表达用户需求的方法主要包括自顶向下和自底向上两类方法。自顶向下的结构化分析方法(Structured Analysis,简称SA方法)从最上层的系统组织机构入手,采用逐层分解的方式分析系统,并把每一层用数据流图和数据字典描述。数据流图表达了数据和处理过程的关系。系统中的数据则借助数据字典(Data Dictionary,简称DD)来描述。数据字典是各类数据描述的集合,它是关于数据库中数据的描述,即元数据,而不是数据本身。数据字典通常包括数据项、数据结构、数据流、数据存储和处理过程五个部分(至少应该包含每个字段的数据类型和在每个表内的主外键)。数据项描述={数据项名,数据项含义说明,别名,数据类型,长度, 取值范围,取值含义,与其他数据项的逻辑关系} 数据结构描述={数据结构名,含义说明,组成:{数据项或数据结构}} 数据流描述={数据流名,说明,数据流来源,数据流去向, 组成:{数据结构},平均流量,高峰期流量} 数据存储描述={数据存储名,说明,编号,流入的数据流,流出的数据流, 组成:{数据结构},数据量,存取方式} 处理过程描述={处理过程名,说明,输入:{数据流},输出:{数据流}, 处理:{简要说明}} 2. 概念结构设计阶段 通过对用户需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型,可以用E-R图表示。 概念模型用于信息世界的建模。概念模型不依赖于某一个DBMS支持的数据模型。概念模型可以转换为计算机上某一DBMS支持的特定数据模型。 概念模型特点:(1) 具有较强的语义表达能力,能够方便、直接地表达应用中的各种语义知识。 (2) 应该简单、清晰、易于用户理解,是用户与数据库设计人员之间进行交流的语言。概念模型设计的一种常用方法为IDEF1X方法,它就是把实体-联系方法应用到语义数据模型中的一种语义模型化技术,用于建立系统信息模型。 使用IDEF1X方法创建E-R模型的步骤如下所示:2.1 第零步——初始化工程这个阶段的任务是从目的描述和范围描述开始,确定建模目标,开发建模计划,组织建模队伍,收集源材料,制定约束和规范。收集源材料是这阶段的重点。通过调查和观察结果,业务流程,原有系统的输入输出,各种报表,收集原始数据,形成了基本数据资料表。2.2 第一步——定义实体实体集成员都有一个共同的特征和属性集,可以从收集的源材料——基本数据资料表中直接或间接标识出大部分实体。根据源材料名字表中表示物的术语以及具有“代码”结尾的术语,如客户代码、代理商代码、产品代码等将其名词部分代表的实体标识出来,从而初步找出潜在的实体,形成初步实体表。2.3 第二步——定义联系IDEF1X模型中只允许二元联系,n元联系必须定义为n个二元联系。根据实际的业务需求和规则,使用实体联系矩阵来标识实体间的二元关系,然后根据实际情况确定出连接关系的势、关系名和说明,确定关系类型,是标识关系、非标识关系(强制的或可选的)还是非确定关系、分类关系。如果子实体的每个实例都需要通过和父实体的关系来标识,则为标识关系,否则为非标识关系。非标识关系中,如果每个子实体的实例都与而且只与一个父实体关联,则为强制的,否则为非强制的。如果父实体与子实体代表的是同一现实对象,那么它们为分类关系。2.4 第三步——定义码通过引入交叉实体除去上一阶段产生的非确定关系,然后从非交叉实体和独立实体开始标识侯选码属性,以便唯一识别每个实体的实例,再从侯选码中确定主码。为了确定主码和关系的有效性,通过非空规则和非多值规则来保证,即一个实体实例的一个属性不能是空值,也不能在同一个时刻有一个以上的值。找出误认的确定关系,将实体进一步分解,最后构造出IDEF1X模型的键基视图(KB图)。2.5 第四步——定义属性从源数据表中抽取说明性的名词开发出属性表,确定属性的所有者。定义非主码属性,检查属性的非空及非多值规则。此外,还要检查完全依赖函数规则和非传递依赖规则,保证一个非主码属性必须依赖于主码、整个主码、仅仅是主码。以此得到了至少符合关系理论第三范式的改进的IDEF1X模型的全属性视图。2.6 第五步——定义其他对象和规则 定义属性的数据类型、长度、精度、非空、缺省值、约束规则等。定义触发器、存储过程、视图、角色、同义词、序列等对象信息。3. 逻辑结构设计阶段 将概念结构转换为某个DBMS所支持的数据模型(例如关系模型),并对其进行优化。设计逻辑结构应该选择最适于描述与表达相应概念结构的数据模型,然后选择最合适的DBMS。将E-R图转换为关系模型实际上就是要将实体、实体的属性和实体之间的联系转化为关系模式,这种转换一般遵循如下原则: 1)一个实体型转换为一个关系模式。实体的属性就是关系的属性。实体的码就是关系的码。 2)一个m:n联系转换为一个关系模式。与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性。而关系的码为各实体码的组合。 3)一个1:n联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并。如果转换为一个独立的关系模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为n端实体的码。 4)一个1:1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并。5)三个或三个以上实体间的一个多元联系转换为一个关系模式。与该多元联系相连的各实体的码以及联系本身的属性均转换为关系的属性。而关系的码为各实体码的组合。 6)同一实体集的实体间的联系,即自联系,也可按上述1:1、1:n和m:n三种情况分别处理。 7)具有相同码的关系模式可合并。 为了进一步提高数据库应用系统的性能,通常以规范化理论为指导,还应该适当地修改、调整数据模型的结构,这就是数据模型的优化。确定数据依赖。消除冗余的联系。确定各关系模式分别属于第几范式。确定是否要对它们进行合并或分解。一般来说将关系分解为3NF的标准,即:表内的每一个值都只能被表达一次。•?表内的每一行都应该被唯一的标识(有唯一键)。表内不应该存储依赖于其他键的非键信息。 4. 数据库物理设计阶段 为逻辑数据模型选取一个最适合应用环境的物理结构(包括存储结构和存取方法)。根据DBMS特点和处理的需要,进行物理存储安排,设计索引,形成数据库内模式。5. 数据库实施阶段 运用DBMS提供的数据语言(例如SQL)及其宿主语言(例如C),根据逻辑设计和物理设计的结果建立数据库,编制与调试应用程序,组织数据入库,并进行试运行。 数据库实施主要包括以下工作:用DDL定义数据库结构、组织数据入库 、编制与调试应用程序、数据库试运行 6. 数据库运行和维护阶段 数据库应用系统经过试运行后即可投入正式运行。在数据库系统运行过程中必须不断地对其进行评价、调整与修改。包括:数据库的转储和恢复、数据库的安全性、完整性控制、数据库性能的监督、分析和改进、数据库的重组织和重构造。建模工具的使用为加快数据库设计速度,目前有很多数据库辅助工具(CASE工具),如Rational公司的Rational Rose,CA公司的Erwin和Bpwin,Sybase公司的PowerDesigner以及Oracle公司的Oracle Designer等。ERwin主要用来建立数据库的概念模型和物理模型。它能用图形化的方式,描述出实体、联系及实体的属性。ERwin支持IDEF1X方法。通过使用ERwin建模工具自动生成、更改和分析IDEF1X模型,不仅能得到优秀的业务功能和数据需求模型,而且可以实现从IDEF1X模型到数据库物理设计的转变。ERwin工具绘制的模型对应于逻辑模型和物理模型两种。在逻辑模型中,IDEF1X工具箱可以方便地用图形化的方式构建和绘制实体联系及实体的属性。在物理模型中,ERwin可以定义对应的表、列,并可针对各种数据库管理系统自动转换为适当的类型。设计人员可根据需要选用相应的数据库设计建模工具。例如需求分析完成之后,设计人员可以使用Erwin画ER图,将ER图转换为关系数据模型,生成数据库结构;画数据流图,生成应用程序。二、数据库设计技巧1. 设计数据库之前(需求分析阶段)1) 理解客户需求,询问用户如何看待未来需求变化。让客户解释其需求,而且随着开发的继续,还要经常询问客户保证其需求仍然在开发的目的之中。2) 了解企业业务可以在以后的开发阶段节约大量的时间。3) 重视输入输出。在定义数据库表和字段需求(输入)时,首先应检查现有的或者已经设计出的报表、查询和视图(输出)以决定为了支持这些输出哪些是必要的表和字段。举例:假如客户需要一个报表按照邮政编码排序、分段和求和,你要保证其中包括了单独的邮政编码字段而不要把邮政编码糅进地址字段里。4) 创建数据字典和ER 图表ER 图表和数据字典可以让任何了解数据库的人都明确如何从数据库中获得数据。ER图对表明表之间关系很有用,而数据字典则说明了每个字段的用途以及任何可能存在的别名。对SQL 表达式的文档化来说这是完全必要的。5) 定义标准的对象命名规范数据库各种对象的命名必须规范。2. 表和字段的设计(数据库逻辑设计)表设计原则1) 标准化和规范化数据的标准化有助于消除数据库中的数据冗余。标准化有好几种形式,但Third Normal Form(3NF)通常被认为在性能、扩展性和数据完整性方面达到了最好平衡。简单来说,遵守3NF 标准的数据库的表设计原则是:“One Fact in One Place”即某个表只包括其本身基本的属性,当不是它们本身所具有的属性时需进行分解。表之间的关系通过外键相连接。它具有以下特点:有一组表专门存放通过键连接起来的关联数据。举例:某个存放客户及其有关定单的3NF 数据库就可能有两个表:Customer 和Order。Order 表不包含定单关联客户的任何信息,但表内会存放一个键值,该键指向Customer 表里包含该客户信息的那一行。事实上,为了效率的缘故,对表不进行标准化有时也是必要的。2) 数据驱动采用数据驱动而非硬编码的方式,许多策略变更和维护都会方便得多,大大增强系统的灵活性和扩展性。举例,假如用户界面要访问外部数据源(文件、XML 文档、其他数据库等),不妨把相应的连接和路径信息存储在用户界面支持表里。还有,如果用户界面执行工作流之类的任务(发送邮件、打印信笺、修改记录状态等),那么产生工作流的数据也可以存放在数据库里。角色权限管理也可以通过数据驱动来完成。事实上,如果过程是数据驱动的,你就可以把相当大的责任推给用户,由用户来维护自己的工作流过程。3) 考虑各种变化在设计数据库的时候考虑到哪些数据字段将来可能会发生变更。举例,姓氏就是如此(注意是西方人的姓氏,比如女性结婚后从夫姓等)。所以,在建立系统存储客户信息时,在单独的一个数据表里存储姓氏字段,而且还附加起始日和终止日等字段,这样就可以跟踪这一数据条目的变化。字段设计原则4) 每个表中都应该添加的3 个有用的字段•?dRecordCreationDate,在VB 下默认是Now(),而在SQL Server 下默认为GETDATE()•?sRecordCreator,在SQL Server 下默认为NOT NULL DEFAULT USER•?nRecordVersion,记录的版本标记;有助于准确说明记录中出现null 数据或者丢失数据的原因5) 对地址和电话采用多个字段描述街道地址就短短一行记录是不够的。Address_Line1、Address_Line2 和Address_Line3 可以提供更大的灵活性。还有,电话号码和邮件地址最好拥有自己的数据表,其间具有自身的类型和标记类别。6) 使用角色实体定义属于某类别的列在需要对属于特定类别或者具有特定角色的事物做定义时,可以用角色实体来创建特定的时间关联关系,从而可以实现自我文档化。举例:用PERSON 实体和PERSON_TYPE 实体来描述人员。比方说,当John Smith, Engineer 提升为John Smith, Director 乃至最后爬到John Smith, cio 的高位,而所有你要做的不过是改变两个表PERSON 和PERSON_TYPE 之间关系的键值,同时增加一个日期/时间字段来知道变化是何时发生的。这样,你的PERSON_TYPE 表就包含了所有PERSON 的可能类型,比如Associate、Engineer、Director、CIO 或者CEO 等。还有个替代办法就是改变PERSON 记录来反映新头衔的变化,不过这样一来在时间上无法跟踪个人所处位置的具体时间。7) 选择数字类型和文本类型尽量充足在SQL 中使用smallint 和tinyint 类型要特别小心。比如,假如想看看月销售总额,总额字段类型是smallint,那么,如果总额超过了$32,767 就不能进行计算操作了。而ID 类型的文本字段,比如客户ID 或定单号等等都应该设置得比一般想象更大。假设客户ID 为10 位数长。那你应该把数据库表字段的长度设为12 或者13 个字符长。但这额外占据的空间却无需将来重构整个数据库就可以实现数据库规模的增长了。8) 增加删除标记字段在表中包含一个“删除标记”字段,这样就可以把行标记为删除。在关系数据库里不要单独删除某一行;最好采用清除数据程序而且要仔细维护索引整体性。 3. 选择键和索引(数据库逻辑设计)键选择原则:1) 键设计4 原则•?为关联字段创建外键。•?所有的键都必须唯一。•?避免使用复合键。•?外键总是关联唯一的键字段。2) 使用系统生成的主键设计数据库的时候采用系统生成的键作为主键,那么实际控制了数据库的索引完整性。这样,数据库和非人工机制就有效地控制了对存储数据中每一行的访问。采用系统生成键作为主键还有一个优点:当拥有一致的键结构时,找到逻辑缺陷很容易。3) 不要用用户的键(不让主键具有可更新性)在确定采用什么字段作为表的键的时候,可一定要小心用户将要的字段。通常的情况下不要选择用户可的字段作为键。4) 可选键有时可做主键把可选键进一步用做主键,可以拥有建立强大索引的能力。索引使用原则:索引是从数据库中获取数据的最高效方式之一。95%的数据库性能问题都可以采用索引技术得到解决。1) 逻辑主键使用唯一的成组索引,对系统键(作为存储过程)采用唯一的非成组索引,对任何外键列采用非成组索引。考虑数据库的空间有多大,表如何进行访问,还有这些访问是否主要用作读写。2) 大多数数据库都索引自动创建的主键字段,但是可别忘了索引外键,它们也是经常使用的键,比如运行查询显示主表和所有关联表的某条记录就用得上。3) 不要索引memo/note 字段,不要索引大型字段(有很多字符),这样作会让索引占用太多的存储空间。4) 不要索引常用的小型表不要为小型数据表设置任何键,假如它们经常有插入和删除操作就更别这样作了。对这些插入和删除操作的索引维护可能比扫描表空间消耗更多的时间。4. 数据完整性设计(数据库逻辑设计)1) 完整性实现机制:实体完整性:主键参照完整性:父表中删除数据:级联删除;受限删除;置空值父表中插入数据:受限插入;递归插入父表中更新数据:级联更新;受限更新;置空值DBMS对参照完整性可以有两种方法实现:外键实现机制(约束规则)和触发器实现机制用户定义完整性: NOT NULL;CHECK;触发器2) 用约束而非商务规则强制数据完整性采用数据库系统实现数据的完整性。这不但包括通过标准化实现的完整性而且还包括数据的功能性。在写数据的时候还可以增加触发器来保证数据的正确性。不要依赖于商务层保证数据完整性;它不能保证表之间(外键)的完整性所以不能强加于其他完整性规则之上。3) 强制指示完整性在有害数据进入数据库之前将其剔除。激活数据库系统的指示完整性特性。这样可以保持数据的清洁而能迫使开发人员投入更多的时间处理错误条件。4) 使用查找控制数据完整性控制数据完整性的最佳方式就是限制用户的选择。只要有可能都应该提供给用户一个清晰的价值列表供其选择。这样将减少键入代码的错误和误解同时提供数据的一致性。某些公共数据特别适合查找:国家代码、状态代码等。5) 采用视图为了在数据库和应用程序代码之间提供另一层抽象,可以为应用程序建立专门的视图而不必非要应用程序直接访问数据表。这样做还等于在处理数据库变更时给你提供了更多的自由。5. 其他设计技巧1) 避免使用触发器触发器的功能通常可以用其他方式实现。在调试程序时触发器可能成为干扰。假如你确实需要采用触发器,你最好集中对它文档化。2) 使用常用英语(或者其他任何语言)而不要使用编码在创建下拉菜单、列表、报表时最好按照英语名排序。假如需要编码,可以在编码旁附上用户知道的英语。3) 保存常用信息让一个表专门存放一般数据库信息非常有用。在这个表里存放数据库当前版本、最近检查/修复(对Access)、关联设计文档的名称、客户等信息。这样可以实现一种简单机制跟踪数据库,当客户抱怨他们的数据库没有达到希望的要求而与你联系时,这样做对非客户机/服务器环境特别有用。4) 包含版本机制在数据库中引入版本控制机制来确定使用中的数据库的版本。时间一长,用户的需求总是会改变的。最终可能会要求修改数据库结构。把版本信息直接存放到数据库中更为方便。 5) 编制文档对所有的快捷方式、命名规范、限制和函数都要编制文档。采用给表、列、触发器等加注释的数据库工具。对开发、支持和跟踪修改非常有用。对数据库文档化,或者在数据库自身的内部或者单独建立文档。这样,当过了一年多时间后再回过头来做第2 个版本,犯错的机会将大大减少。6) 测试、测试、反复测试建立或者修订数据库之后,必须用用户新输入的数据测试数据字段。最重要的是,让用户进行测试并且同用户一道保证选择的数据类型满足商业要求。测试需要在把新数据库投入实际服务之前完成。7) 检查设计在开发期间检查数据库设计的常用技术是通过其所支持的应用程序原型检查数据库。换句话说,针对每一种最终表达数据的原型应用,保证你检查了数据模型并且查看如何取出数据。三、数据库命名规范1. 实体(表)的命名1) 表以名词或名词短语命名,确定表名是采用复数还是单数形式,此外给表的别名定义简单规则(比方说,如果表名是一个单词,别名就取单词的前4 个字母;如果表名是两个单词,就各取两个单词的前两个字母组成4 个字母长的别名;如果表的名字由3 个单词组成,从头两个单词中各取一个然后从最后一个单词中再取出两个字母,结果还是组成4 字母长的别名,其余依次类推)对工作用表来说,表名可以加上前缀WORK_ 后面附上采用该表的应用程序的名字。在命名过程当中,根据语义拼凑缩写即可。注意,由于ORCLE会将字段名称统一成大写或者小写中的一种,所以要求加上下划线。举例:定义的缩写 Sales: Sal 销售;Order: Ord 订单;Detail: Dtl 明细;则销售订单明细表命名为:Sal_Ord_Dtl;2) 如果表或者是字段的名称仅有一个单词,那么建议不使用缩写,而是用完整的单词。举例:定义的缩写 Material Ma 物品;物品表名为:Material, 而不是 Ma.但是字段物品编码则是:Ma_ID;而不是Material_ID3) 所有的存储值列表的表前面加上前缀Z目的是将这些值列表类排序在数据库最后。4) 所有的冗余类的命名(主要是累计表)前面加上前缀X冗余类是为了提高数据库效率,非规范化数据库的时候加入的字段或者表5) 关联类通过用下划线连接两个基本类之后,再加前缀R的方式命名,后面按照字母顺序罗列两个表名或者表名的缩写。关联表用于保存多对多关系。如果被关联的表名大于10个字母,必须将原来的表名的进行缩写。如果没有其他原因,建议都使用缩写。举例:表Object与自身存在多对多的关系,则保存多对多关系的表命名为:R_Object;表 Depart和Employee;存在多对多的关系;则关联表命名为R_Dept_Emp2. 属性(列)的命名1) 采用有意义的列名,表内的列要针对键采用一整套设计规则。每一个表都将有一个自动ID作为主健,逻辑上的主健作为第一组候选主健来定义,如果是数据库自动生成的编码,统一命名为:ID;如果是自定义的逻辑上的编码则用缩写加“ID”的方法命名。如果键是数字类型,你可以用_NO 作为后缀;如果是字符类型则可以采用_CODE 后缀。对列名应该采用标准的前缀和后缀。举例:销售订单的编号字段命名:Sal_Ord_ID;如果还存在一个数据库生成的自动编号,则命名为:ID。2) 所有的属性加上有关类型的后缀,注意,如果还需要其它的后缀,都放在类型后缀之前。注: 数据类型是文本的字段,类型后缀TX可以不写。有些类型比较明显的字段,可以不写类型后缀。3) 采用前缀命名给每个表的列名都采用统一的前缀,那么在编写SQL表达式的时候会得到大大的简化。这样做也确实有缺点,比如破坏了自动表连接工具的作用,后者把公共列名同某些数据库联系起来。3. 视图的命名1) 视图以V作为前缀,其他命名规则和表的命名类似;2) 命名应尽量体现各视图的功能。4. 触发器的命名触发器以TR作为前缀,触发器名为相应的表名加上后缀,Insert触发器加’_I’,Delete触发器加’_D’,Update触发器加’_U’,如:TR_Customer_I,TR_Customer_D,TR_Customer_U。5. 存储过程名存储过程应以’UP_’开头,和系统的存储过程区分,后续部分主要以动宾形式构成,并用下划线分割各个组成部分。如增加代理商的帐户的存储过程为’UP_Ins_Agent_Account’。6. 变量名变量名采用小写,若属于词组形式,用下划线分隔每个单词,如@my_err_no。7. 命名中其他注意事项1) 以上命名都不得超过30个字符的系统限制。变量名的长度限制为29(不包括标识字符@)。2) 数据对象、变量的命名都采用英文字符,禁止使用中文命名。绝对不要在对象名的字符之间留空格。3) 小心保留词,要保证你的字段名没有和保留词、数据库系统或者常用访问方法冲突5) 保持字段名和类型的一致性,在命名字段并为其指定数据类型的时候一定要保证一致性。假如数据类型在一个表里是整数,那在另一个表里可就别变成字符型了。

sql数据库设计样例

数据库技术是信息资源开发、管理和服务的最有效的手段。随着计算机技术、通信技术和网络技术的发展,数据库的应用范围越来越广泛,已渗透到社会的各个领域。从小型的单项事务处理系统到大型复杂的信息系统大都采用先进的数据库技术来保持系统数据的整体性、完整性和共享性。目前,数据库的建设规模、数据库信息的大小和使用频度已成为衡量一个国家或地区信息化程度的重要标识之一。数据库设计时间里数据库及其应用系统的技术,是信息系统开发和建设中的核心技术,具体说,数据库设计是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效地存储数据,满足各种用户的应用需求(信息要求和处理要去)。在数据库领域内,使用数据库的各类系统通常被称为数据库应用系统。数据库技术和产品是计算机领域中最为活跃的部分之一,数据库技术与产品的发展总是与计算机技术的发展密切相关,从主机到现在的Internet/Intranet及网络计算。数据库总是站在技术的最前沿。 本系统采用了SQL SERVER 2008数据库作为后台数据库,SQL SERVER 2008是一个真正的多用户、多线程SQL数据库服务器。3.2 库表概要设计共分为以下四个数据库表:(1) 用户登陆信息表: Logintable(2) 客户资料表:nomalpeopletable(3) 员工信息表: workpeopletable(4) 购买商品表:ordertable(5) 全国城市表:Citytable(6) 食品信息表:GoodstableLogintable(登录验证表)列名 数据类型 是否可以为空 备注controllerId int 不 管理员工号Password nvarchar(50) 不 登录密码Type Int 不 1为普通管理员;2为高级管理员Clienttable(客户信息表)列名 数据类型 是否可以为空 备注clientName nvarchar(50) 不 客户名称clientOriginId Int 不 客户来源(外键对应controllertable中,controllerId)clientSort nvarchar(50) 不 客户类别(可选内容为工程商、代理商、工程甲方)clientCity nvarchar(50) 不 所在区域(可选框,全国的各个城市)clientPhone nvarchar(50) 不 联系电话clientprincipal nvarchar(50) 不 联系人clientMobile nvarchar(50) 可以 手机clientAddress nvarchar(50) 不 联系地址controllertable(员工信息表)列名 数据类型 是否可以为空 备注controllerId int 不 管理员工号,随机数name nvarchar(50) 不 员工姓名sex Char 不 员工性别study Char 不 员工学历worktime nvarchar(50) 不 从业时间purchasetable(客户购买商品表)列名 数据类型 是否可以为空 备注Id Int 不 主键自增clientName nvarchar(50) 不 企业名称Money Money 不 购买金额Time nvarchar(50) 不 购买时间controllerId Int 不 (所属管理员)外键对应controllertable中,controllerIdText nvarchar(50) 不 产品名称citytable(全国城市表)列名 数据类型 是否可以为空 备注Id Int 不 主键自增City nvarchar(50) 不 城市名(如:安徽合肥)goodsTable(物品信息表)列名 数据类型 是否可以为空 备注Id Int 不 主键自增Shopname nvarchar(50) 不 物品名称unitprice Money 不 物品单价不懂问我!我很在行的!~