.NET数据库编程求索之路--2.示例系统概览与设计(1)

2  示例系统概览与设计(1)

  本章首先向你介绍一个贯穿全书的小型示例系统(订单管理系统),然后引导你完成系统数据库和界面的设计、创建工作。
  本章主要内容:
    系统概览
    设计数据库
    创建数据库
    设计界面

2.1  示例系统概览


  示例非常简单,是一家商店用的订单管理系统。你可以把这家商店想象成一个家居用品商店,顾客在商店里体验并挑选中意的商品,售货员记录顾客的联系方式、订购的商品并收取定金,然后通知仓库配货和发货,最后顾客收到货物并支付尾款,交易完成。我们的订单管理系统是辅助售货员工作的程序,它在主界面里列出已记录的订单基本信息,并提供基于顾客姓名的简单查询功能,如图2-1:

 

图2-1  订单列表界面

售货员可以新增、修改或删除选中的订单,新增/修改订单的界面如图2-2:

 

图2-2  订单新增/修改界面

  显然,这是一个小程序,甚至不能称其为系统,它主要实现对数据库的CRUD(Create、Read/Retrieve、Update和Delete)等基本操作。本书采用各种方式实现它,好像用牛刀杀鸡一样。但是,为了更清晰的探索各种实现方式,而不是这家商店的业务,请你从观赏的角度看它,并把它当作大系统的一部分。
  该程序基于SQL Server 2005 Developer Edition数据库系统,采用Visual Studio 2010 Professional Edition集成开发环境,利用C#语言开发。

 

2.2  设计数据库

  为实现上述系统功能,我们设计一个名为“HomeShop”的数据库,它包括三个数据表:Order表,存储订单的基本信息;OrderItem表,存储订单的详细信息,即顾客具体订购的商品信息;OrderState表,存储订单的状态分类信息。三个表的字段与表间关系设计如图2-3所示,其中,OrderState表与Order表是一对多的关系,Order表与OrderItem表是一对多的关系。

 

图2-3  数据库设计

 

Order表字段详细设计如表2-1:

表2-1  Order表字段详细设计  


列名


数据类型


允许空


说明


OrderID


int



订单ID,主键,自增标识


OrderTime


datetime



下单时间


OrderStateCode


char(1)



订单状态代码,外键,关联OrderState表的Code字段


CustomerName


varchar(30)



顾客姓名


CustomerPhoneNo


varchar(15)



顾客联系电话


CustomerAddress


varchar(60)



送货地址

 
OrderItem表字段详细设计如表2-2:

表2-2  OrderItem表字段详细设计  


列名


数据类型


允许空


说明


OrderItemID


int



订单条目ID,主键,自增标识


OrderID


int



订单ID,外键,关联Order表的OrderID字段


Product


varchar(30)



商品名称


UnitPrice


decimal(18, 2)



单价(元),保留两位小数


Quantity


int



订购数量

 

 OrderState表字段详细设计如表2-3:

表2-3  OrderState表字段详细设计 


列名


数据类型


允许空


说明


Code


char(1)



订单状态代码,主键


Name


varchar(10)



订单状态名称

 

2.3  创建数据库

  下面,我们采用SQL脚本的方式快速创建数据库、表和关系。
  第1步 点击系统任务栏【开始】→【Microsoft SQL Server 2005】→【SQL Server Management Studio】,启动SQL Server管理器。在“连接到服务器”窗体中,单击【连接】按钮。

 

 图2-4  连接到服务器

  第2步 进入SQL Server管理器主窗口后,单击工具栏【新建查询】按钮,输入脚本代码2-1,再单击工具栏【执行】按钮,创建HomeShop数据库。

代码2-1  创建数据库  


CREATE DATABASE [HomeShop]

 

 图2-5  执行SQL脚本代码

 

   第3步 清空上一步中的脚本,输入脚本代码2-2,再单击工具栏【执行】按钮,创建Order、OrderItem、OrderState表。

代码2-2 创建数据表


USE [HomeShop]

 

CREATE TABLE [dbo].[Order](

    [OrderID] [int] IDENTITY(1,1) NOT NULL,

    [OrderTime] [datetime] NOT NULL,

    [OrderStateCode] [char](1) NOT NULL,

    [CustomerName] [varchar](30) NOT NULL,

    [CustomerPhoneNo] [varchar](15) NOT NULL,

    [CustomerAddress] [varchar](60) NULL,

    CONSTRAINT [PK_Order] PRIMARY KEY CLUSTERED

    (

       [OrderID] ASC

    )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]

) ON [PRIMARY]

 

CREATE TABLE [dbo].[OrderItem](

    [OrderItemID] [int] IDENTITY(1,1) NOT NULL,

    [OrderID] [int] NOT NULL,

    [Product] [varchar](30) NOT NULL,

    [UnitPrice] [decimal](18, 2) NOT NULL,

    [Quantity] [int] NOT NULL,

    CONSTRAINT [PK_OrderItem] PRIMARY KEY CLUSTERED

    (

       [OrderItemID] ASC

    )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]

) ON [PRIMARY]

 

CREATE TABLE [dbo].[OrderState](

    [Code] [char](1) NOT NULL,

    [Name] [varchar](10) NOT NULL,

    CONSTRAINT [PK_OrderState] PRIMARY KEY CLUSTERED

    (

       [Code] ASC

    )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]

) ON [PRIMARY]

 

  第4步 清空上一步中的脚本,输入脚本代码2-3,再单击工具栏【执行】按钮,创建外键。

代码2-3 创建外键


USE [HomeShop]

 

ALTER TABLE [dbo].[Order] WITH CHECK

ADD CONSTRAINT [FK_Order_OrderState]

FOREIGN KEY([OrderStateCode])

REFERENCES [dbo].[OrderState] ([Code])

 

ALTER TABLE [dbo].[OrderItem] WITH CHECK

ADD CONSTRAINT [FK_OrderItem_Order]

FOREIGN KEY([OrderID])

REFERENCES [dbo].[Order] ([OrderID])

 

  第5步 清空上一步中的脚本,输入脚本代码2-4,插入预定义的3条订单状态记录。至此,数据库创建完毕。

代码2-4 插入数据


USE [HomeShop]

 

INSERT INTO [OrderState]

VALUES('1','开始配货');

 

INSERT INTO [OrderState]

VALUES('2','货已送达');

 

INSERT INTO [OrderState]

VALUES('3','交易成功');

 

转载请注明:【 夏春涛 email: xchuntao@163.com  blog: http://www.cnblogs.com/SummerRain
 

时间: 2024-10-23 21:59:37

.NET数据库编程求索之路--2.示例系统概览与设计(1)的相关文章

.NET数据库编程求索之路--2.示例系统概览与设计(2)

2  示例系统概览与设计(2) 2.4  设计界面 我们先创建一个界面原型系统,为后续具体功能的编程实现打下一个基础.启动Visual Studio 2010,单击[文件]→[新建项目],在"新建项目"对话框中(图2-6),选择"Windows窗体应用程序",输入项目名称 "HomeShop.WinForm",位置"D:\",解决方案名称"HomeShop",然后单击[确定].系统在D盘根目录下创建了&qu

.NET数据库编程求索之路--1.引子

长期做.NET MIS系统开发,打交到最多还是数据库.闲来无事,朝花夕拾,将.NET数据库编程一路走来的经验整理并与朋友分享一下.以一个小小的订单管理系统为例,采用代码实战的方式,计划分享如下内容: 1.不分层,采用SQL语句实现数据访问: 2.基于三层架构,使用DataTable传递数据: 3.基于三层架构,使用List传递数据: 4.基于三层架构,使用List传递数据:采用存储过程实现数据访问: 5.基于工厂模式,实现数据库可切换(以SQL和Access为例): 6.采用LinqToSQL实

.NET数据库编程求索之路--3.使用ADO.NET实现(SQL语句篇)(1)

3.使用ADO.NET实现(SQL语句篇)(1) ADO.NET是.NET平台的数据访问技术体系,其是微软在COM時代奠基的OLE DB技術发展而来的.微软在OLE DB之上建立了一个很好的数据存取模型ADO,并被业界接受,如VC6.0.Delphi5/6等都使用ADO数据存取技术.ADO.NET继承了ADO的优点,但它是微软在.NET平台下采用全新的架构和理念构建的.ADO.NET主要通过Connection(连接对象) .Command(命令对象) .Parameter(Sql参数) .Da

.NET数据库编程求索之路--7.使用ADO.NET实现(工厂模式-实现多数据库切换)(4)

  7.使用ADO.NET实现(工厂模式-实现多数据库切换)(4) 7.7 业务逻辑层HomeShop.BLL OrderBiz.cs View Code  1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 //新添命名空间 6 using HomeShop.Model; 7 using HomeShop.DALInterface; 8 using Hom

.NET数据库编程求索之路--4.使用ADO.NET实现(三层架构篇-使用Table传递数据)(3)

4.使用ADO.NET实现(三层架构篇-使用Table传递数据)(3)   作者:夏春涛 xchunta@163.com 转载请注明来源: http://www.cnblogs.com/SummerRain/archive/2012/07/25/2609144.html 4.4 数据访问层HomeShop.DAL OrderDAO.cs   1 using System;  2 using System.Collections.Generic;  3 using System.Linq;  4 

.NET数据库编程求索之路--5.使用ADO.NET实现(三层架构篇-使用List传递数据)(1)

  5.使用ADO.NET实现(三层架构篇-使用List传递数据)(1)   5.1 解决方案框架 解决方案(.sln)包含以下几个项目: (1)类库项目HomeShop.DbUtility,数据访问实用工具:[同4.2] (2)类库项目HomeShop.Model,实体层:[同4.3] (3)类库项目HomeShop.DAL,数据访问层: (4)类库项目HomeShop.BLL,业务逻辑层: (5)WinForm项目HomeShop.WinForm,界面层.   5.2 数据访问层HomeSh

.NET数据库编程求索之路--3.使用ADO.NET实现(SQL语句篇)(2)

3.使用ADO.NET实现(SQL语句篇)(2)   3.3  FormEdit新增/修改窗体代码   代码3-3 FormEdit 窗体代码 1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using

.NET数据库编程求索之路--6.使用ADO.NET实现(三层架构篇-使用List传递数据-基于存储过程)(1)

6.使用ADO.NET实现(三层架构篇-使用List传递数据-基于存储过程)(1)    [ 夏春涛 email: xchuntao@163.com  blog: http://www.cnblogs.com/SummerRain ] 6.1 解决方案框架 解决方案(.sln)包含以下几个项目: (1)类库项目HomeShop.DbUtility,数据访问实用工具:[同5] (2)类库项目HomeShop.Model,实体层:[同5] (3)类库项目HomeShop.DAL,数据访问层: (4)

.NET数据库编程求索之路--11.一些思考

11.一些思考   (1)分层不一定都分为不同的Project,也可以是分为不同的目录(如MVC中的Controllers和Models目录),甚至统一的后缀也是一种分层的方法(如10中划分输入验证层时使用.validater.cs后缀),分层是逻辑概念,不需要与物理概念严格对应. (2)使用partial关键词将一个较大类划分为几个较小的分部类,是降低代码耦合度,提高代码规整度的有效方式. (3)多数据库切换不是常见的需求,一般的项目中用不到,所以不要轻易就使用,避免过度设计. (4)我总感觉