SQL Server 数据库设计

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL Server 数据库设计相关的知识,希望对你有一定的参考价值。

参考技术A

SQL Server 系统数据库在安装软件时自动创建,用于协助系统共同完成对数据库的操作;也是数据库运行的基础;

1,master数据库

是SQL Server 2012的核心数据库,如果损坏则数据库软件无法运行,主要包含如下主要信息:

1)所有用户登陆名和用户ID所属角色

2)数据库存储路径

3)服务器中数据库的名称和相关信息

4)系统配置设置, SQL Server 初始化信息

2,model数据库

在创建数据库时,总是以一套预定义的标准为模板进行创建的。以model数据库为模板来创建其他数据库。且model数据库是tempdb数据库的基础。

3,tempdb数据库

它是一个临时数据库,用来存储用户建立的临时表和临时存储过程,存储用户定义的全局变量值。它存在于SQL Server会话期间,会话结束,则关闭tempdb数据库,且数据库丢失。

4,msdb数据库

用于代理计划警报和作业

SQL Server 数据库存储文件

数据库文件是由数据文件和事务日志文件组成。

1,数据库文件指数据库中用来存储数据库数据和数据库对象的文件,一个数据库只能由一个主数据库文件,扩展名为 .mdf

2, 次数据库文件包含除主数据库文件外的所有数据文件,一个数据库可以没有次数据库文件,也可以由多个,扩展名为 .ndf

3, 日志文件由一系列日志记录组成,它记录了存储数据库的更新情况等事务日志信息,用户对数据库进行的插入,删除,更新都会记录在日志文件中。数据库发生损坏时可根据日志文件分析出错原因,或者数据丢失时,使用事务日志恢复数据库。每个数据库至少要有一个日志文件。

SQL Server 数据库创建,使用T-SQL语言创建:

使用T-SQL语言删除数据库:

SQL Server 数据库迁移:

方法1:“分离/附加”数据库,即把数据库文件(.MDF)和对应的日志文件(.LDF)拷贝到其它磁盘上作备份,然后把这两个文件再拷贝到任何需要这个数据库的系统之中。

分离数据库就是将某个数据库从SQL Server数据库列表中删除,使其不再被SQL Server管理和使用,但该数据库的文件(.MDF)和对应的日志文件(.LDF)完好无损。分离成功后,就可以把该数据库文件(.MDF)和对应的日志文件(.LDF)拷贝到其它磁盘中作为备份保存。

分离之前,设置数据库为单个用户,并记住该数据库所在路径。

“任务”—“分离”

然后分离数据库页面选中“更新统计信息”复选框。若“消息”列中没有显示存在活动连接,则“状态”列显示为“就绪”;否则显示“未就绪”,此时必须勾选“删除连接”列的复选框。分离后资源管理器中数据库消失

将需要附加的数据库文件和日志文件拷贝到某个已经创建好的文件夹中。

右击数据库对象,并在快捷菜单中选择“附加”命令,打开“附加数据库”窗口。

添加—选择需要附件的数据库的.MDF文件。“附件为”数据库名称可修改。

点餐系统数据库设计--SQL Server

目录

友情链接

1、学生成绩管理系统数据库设计–MySQL

学生成绩管理系统数据库设计–MySQL

2、医疗信息管理系统数据库–MySQL

医疗信息管理系统数据库–MySQL

3、邮件管理数据库设计–MySQL

邮件管理数据库设计–MySQL

4、商品管理系统数据库设计–SQL Server

商品管理系统数据库设计–SQL Server

5、SQL Server医疗信息管理系统数据库【英文版-源码】–(Medical Management System Database)

SQL Server医疗信息管理系统数据库【英文版-源码】–(Medical Management System Database)

6、SQL Server电影院数据库管理系统【英文版-源码】–(Movie Theatre Management System Database)

SQL Server电影院数据库管理系统【英文版-源码】–(Movie Theatre Management System Database)

一、需求分析

1.选题背景

随着经济不断发展,餐饮行业也随着物质生活水平逐步提高而迅速发展,人们对生活质量的要求也越来越高,享受真正自动化、人性化的服务成为了人们追求高质量生活的重要内容。在大多数的餐饮场所点菜、查看菜谱等是人工完成的,速度慢,效率低,极易出错,造成人力物力的极大浪费。然而随着我国市场经济的快速发展,餐厅点菜系统成为餐厅提升服务档次,提高办公效率,提高竞争力的关键因素之餐饮业要想跟上发展形势,餐馆点餐的信息化进程也要加快脚步。

2.系统功能

2.1 查询菜单功能

顾客可以根据所有餐厅的菜单信息,数据菜单的相关信息例如通过菜品的菜系查找对应菜系的菜品,也可以通过菜品类型查询相应的菜品,也可以根据价格范围来查询目标菜品,由餐厅管理者维护菜品信息。

2.2 菜品折扣功能

餐厅菜品一定程度上有折扣,可定期或者集中维护,顾客也可以通过折扣情况来选择菜品。

2.3 点餐功能

顾客进店后可根据菜单点相应的菜品,可以记录顾客点餐的份数和对应的口味需求,顾客也可以更改自己的点餐信息。餐厅管理者也可以查看菜品受欢迎程度以及对顾客口味进行分析。

2.4 餐桌和顾客信息

餐桌为顾客提供用餐位置,需要实时更新当前餐桌状态(空闲,就餐),不同餐桌提供的座位数不同。顾客是进店顾客相关信息,两个表都有管理员来维护,每一个顾客id对应一起进餐厅的顾客,人数不限,同时需要指定顾客的就餐桌号。

2.5 顾客实时状态维护

为了餐厅管理者更好维护餐厅就餐情况,为餐厅设计顾客状态表数据,可以数据顾客查询顾客当前状态。

2.6 顾客排队功能

顾客进入餐厅,如果满员需要一定时间等待,根据人数排队不同的桌位人数的排队。

2.7 结算功能

顾客就餐完成,完成结款,可以通过顾客编号,餐桌号,点单编号等信息查询到顾客的消费情况。每天的销售统计,套餐和单点的销售情况,实现对本店总体销售情况的统计。

3.用户需求分析

餐厅管理系统的总目标是为用户提供迅速、高效的服务,减免手工处理的繁琐与误差,及时、准确地反映餐厅的工作情况、经营情况,从而提高餐厅的服务质量,获得更好的经济效益。其具体目标包括:
1)快速完成顾客的点餐。
2)准确无误地记录顾客的每笔消费记录。
3)实时、快速、准确地提供最新餐单。
4)方便查询顾客消费情况。
5)实现顾客排队功能。
顾客:顾客进店首先选择位置,拿到菜单进行点餐 。
菜品:供顾客选择,可由收银员(店员)维护、更新、删除、新增菜品,菜品编号,可提供菜系、价格和菜品类型供筛选,价格由最初店员设置,可通过折扣或者信息更新变更价格。
点菜单:顾客进店后进行点单,点菜单编号不唯一,同一桌同一批顾客存在点不同菜品的可能,顾客可自行选择口味,顾客可以根据需求取消点单或者增加点单。
顾客状态:体现顾客状态。
优惠信息:包括菜品编号和对应折扣,由店员更新,针对不同菜品折扣不同,店员可根据时令和物价进行更新,折扣范围是0-1。
收银单:统计点菜单顾客实际应付款项和对应折扣后实际应付款,计入收款时间,方便店员计算账目,可由店员维护。
店员:快餐店维护者,数据库主要使用人和维护人,主要维护菜品信息和菜品对应折扣,完成收款和账目统计等。
排队表,用于体现顾客排队情况,根据顾客人数等待餐桌不同。

4.数据字典

数据字典是关于数据的信息的集合,也是对数据流图中所包含的所有元素的定义的集合。
由于本次是小型数据库系统的开发,所以采用卡片形式书写数据字典。每张卡片上保存描述一个数据的信息。这样做更新和修改起来比较方便,而且能单独处理描述每个数据的信息。
下面列出若干数据元素的数据卡片信息。

5.数据流图

二、数据概念结构

1.数据结构

概念结构设计是将分析得到的用户需求抽象为概念模型的过程,即在需求分析的基础上,设计出能够满足用户需求的各种实体以及它们之间的相互关系的模型。概念结构的主要特点是能真实、充分地反映现实世界,易于理解,易于更改,易于向关系、网状、层次等各种数据模型转换,描述概念模型的有力工具是E-R模型。

2.ER图

2.1局部ER图

(1)顾客信息E-R图

(2)餐桌E-R图

(3)顾客状态E-R图

(4)菜品E-R图

(5)点菜单E-R图

(6)优惠信息E-R图

(7)收银员E-R图

(8)收银单E-R图

(8)排队表E-R图

2.2 全局ER图

三、逻辑结构设计

逻辑结构设计的任务就是把概念模型结构转换成某个具体的DBMS所支持的数据模型。设计逻辑结构时,首先是将概念结构转换为一般的关系、网状、层次模型,其次是将转换来的关系、网状、层次模型向特定DBMS支持下的数据模型转换,最后是对数据模型进行优化。
将餐饮点菜系统的E-R图转换成关系数据模型。关系模式如下:

1.实体

顾客:属性有顾客编号、桌号、用餐人数、进店时间
餐桌:属性有餐桌编号、容量、状态(空闲、就餐)
顾客状态:顾客编号、时间、状态(就餐、等待、结款)
菜品:属性有菜品编号、菜品名称、菜品分类、所属菜系、价格、原材料
点菜单:属性有点菜单编号、顾客编号、菜品编号、份数、口味
优惠信息:属性有菜品编号、折扣
收银员:属性有收银员编号、姓名、联系方式
收银单:属性有收银单编号、收银员编号、顾客编号、餐桌编号、应收金额、折扣、实收金额、收银时间
排队表:属性有顾客编号,顾客人数,对应需要餐桌人数

2.实体间联系

一桌顾客对应一个菜单,多桌客人可以使用相同的菜单,因此顾客与菜单有多对一的联系。
客人、收银单之间存在一对一的关系,即一桌客人只对应一个收银单
点菜单和菜品之间存在一对多联系,一个菜单可对应多个菜品
菜品和折扣存在一对一联系,一个菜品对应一种折扣
顾客和顾客状态存在一对多联系,一个顾客对应多种客户状态
排队表顾客与顾客存在一对一关系

四、物理结构设计

数据库的物理结构设计是对于给定的逻辑数据模型,选取一个最合适应用环境的物理结构。数据库的物理结构指的是数据库在物理设备上的存储结构与存取方法,它依赖于给定的计算机系统,是在数据库逻辑结构的基础上设计出一组能够满足实际需求的关系、约束、和索引等信息。餐厅点菜系统的数据库表结构如下:

4.1 顾客CustomerInfo

4.2 菜品信息FoodInfo

4.3 优惠信息DiscountInfo

4.4 点菜单OrderInfo

4.5 店员信息ManagerInfo

4.6 顾客状态实时表ManagerInfo

4.7 收银单ChargeInfo

4.8 顾客排队表Queue

五、数据库构建

1.建表语句

1.1 创建数据库

create database restaurant on primary
(
	name='restaurant',
	filename='D:\\database\\restaurant.mdf',
	size=5MB,
	maxsize=100MB,
	filegrowth=15%
)
Log on
(
	name='restaurant_log',
	filename='D:\\database\\restaurant.ldf',
	size=5MB,
	maxsize=100MB,
	filegrowth=15%
)

GO
use restaurant;

1.2 创建表

-- 餐桌表
create table TableInfo
(
	Table_Id	 int primary key not null,
	Table_Num    int not null,
	Table_Status char(10) not null
);

-- 顾客表
create table CustomerInfo
(
	Cus_Id	  int primary key not null,
	Table_Id  int not null,
	Cus_num	  int not null,
	Intime	  datetime not null
);

-- 收银员表
create table CashierInfo
(
	Cash_Id   int primary key not null,
	Cash_Name varchar(25) not null,
	Tel       char(11) not null
);

-- 菜品表
create table FoodInfo
(
	Food_Id	  int primary key not null,
	Food_Name varchar(25) not null,
	Cuisine   varchar(10) not null,
	Food_Type varchar(4) not null,
	Price     money
);

-- 菜品折扣表
create table DiscountInfo
(
	Food_Id   int primary key not null,
	Food_Name varchar(25) not null,
	Discount  float not null check(Discount<=1) --折扣小于等于1
);

--点菜单表
create table OrderInfo
(
	Order_Id int not null,
	Cus_Id   int not null,
	Food_Id  int not null,
	Food_Num int not null,
	Ftaste   varchar(25) check (Ftaste in ('甜','咸','酸')),
	Primary Key (Order_Id,Food_Id)
);

-- 收银表
create table ChargeInfo
(
	Charg_Id int identity(1,1) primary key not null,
	Cash_Id  int not null,
	Cus_Id   int not null,
	Table_Id int not null,
	Spay     money not null,
	Discount float not null,
	Rpay     money not null,
	Pay_time datetime not null
);

-- 顾客状态实时表
create table CuststatusInfo
(
	Cus_Id        int not null,
	iTime         datetime not null,
	Cus_Status    char(10) not null,
	Primary Key (Cus_Id,Cus_Status)
);

-- 顾客排队表
create table Queue
(
	Cus_Id        int primary key not null,
	Cus_num       int not null,
	Table_Num     int not null
);

1.3 添加外键约束

--折扣菜品菜品id是菜品表菜品id的外键
alter table CustomerInfo
add constraint fk_Tab_Cu foreign key(Table_Id) references TableInfo(Table_Id);

--折扣菜品菜品id是菜品表菜品id的外键
alter table DiscountInfo
add constraint fk_Dis_Fo foreign key(Food_Id) references FoodInfo(Food_Id);

--点菜单的菜品id是菜品表菜品id的外键,顾客id是顾客表顾客id的外键
alter table OrderInfo
add constraint fk_Or_Fo foreign key(Food_Id) references FoodInfo(Food_Id);
alter table OrderInfo
add constraint fk_Or_Cus foreign key(Cus_Id) references CustomerInfo(Cus_Id)

--收银单的顾客id是顾客表顾客id的外键,收银员id是收银员表收银员编号的外键,用餐餐桌id是餐桌表餐桌id的外键
alter table ChargeInfo
add constraint fk_Cu_Cha foreign key(Cus_Id) references CustomerInfo(Cus_Id);
alter table ChargeInfo
add constraint fk_Ca_Cha foreign key(Cash_Id) references CashierInfo(Cash_Id);
alter table ChargeInfo
add constraint fk_Tab_Cha foreign key(Table_Id) references TableInfo(Table_Id);

--顾客状态实时表的顾客id是顾客表顾客id的外键
alter table CuststatusInfo
add constraint fk_Ch_sta foreign key(Cus_Id) references CustomerInfo(Cus_Id)

--顾客排队表的顾客id是顾客表顾客id的外键
alter table Queue
add constraint fk_Qu_sta foreign key(Cus_Id) references CustomerInfo(Cus_Id)

2.插入数据

--餐桌插入数据
insert into TableInfo values(1,2,'空闲');
insert into TableInfo values(2,2,'就餐');
insert into TableInfo values(3,4,'空闲');
insert into TableInfo values(4,4,'就餐');
insert into TableInfo values(5,4,'空闲');
insert into TableInfo values(6,4,'就餐');
insert into TableInfo values(7,2,'就餐');
insert into TableInfo values(8,2,'就餐');
insert into TableInfo values(9,6,'就餐');
insert into TableInfo values(10,8,'空闲');

--顾客插入数据
insert into CustomerInfo values(1001,2,1,'2019-11-19 08:21:56');
insert into CustomerInfo values(1002,3,6,'2019-11-19 08:26:01');
insert into CustomerInfo values(1003,1,1,'2019-11-19 09:00:54');
insert into CustomerInfo values(1004,2,2,'2019-11-19 10:32:23');
insert into CustomerInfo values(1005,2,2,'2019-11-19 12:52:31');
insert into CustomerInfo values(1006,1,1,'2019-11-19 18:21:20');
insert into CustomerInfo values(1007,3,3,'2019-11-19 19:02:01');
insert into CustomerInfo values(1008,4,6,'2019-11-19 19:21:54');
insert into CustomerInfo values(1009,5,10,'2019-11-19 20:15:23');
insert into CustomerInfo values(1010,2,5,'2019-11-19 20:52:35');

--收银员插入数据
insert into CashierInfo values(1,'王娜','13688886661');
insert into CashierInfo values(2,'李英杰','13688886662');
insert into CashierInfo values(3,'赵颖','13688886663');

--菜品插入数据
insert into FoodInfo values(1001,'炖酸菜','东北菜','炖菜',35);
insert into FoodInfo values(1002,'拌拉皮','东北菜','凉菜',15);
insert into FoodInfo values(1003,'酱骨头','东北菜','酱菜',48);
insert into FoodInfo values(1004,'炒西红柿鸡蛋','东北菜','炒菜',18);
insert into FoodInfo values(1005,'炒土豆丝','东北菜','炒菜',12);
insert into FoodInfo values(1006,'猪肉粉丝','东北菜','炖菜',45);
insert into FoodInfo values(1007,'花童鸡','江浙菜','炖菜',50);
insert into FoodInfo values(1008,'扬州狮子头','江浙菜','蒸菜',46);
insert into FoodInfo values(1009,'海带汤','江浙菜','汤',18);
insert into FoodInfo values(1010,'肉丝烧茄子','陕西菜','炒菜',25);

--菜品折扣插入数据
insert into DiscountInfo values(1001,'炖酸菜',0.9);
insert into DiscountInfo values(1002,'拌拉皮',0.85);
insert into DiscountInfo values(1003,'酱骨头',0.9);
insert into DiscountInfo values(1004,'炒西红柿鸡蛋',0.8);
insert into DiscountInfo values(1005,'炒土豆丝',0.8);
insert into DiscountInfo values(1006,'猪肉粉丝',0.9);
insert into DiscountInfo values(1007,'花童鸡',0.85);
insert into DiscountInfo values(1008,'扬州狮子头',0.9);
insert into DiscountInfo values(1009,'海带汤',0.8);
insert into DiscountInfo values(1010,'肉丝烧茄子',0.8);

--点菜单插入数据
insert into OrderInfo values(1,1001,1003,1,'甜');
insert into OrderInfo values(2,1002,1001,2,'甜');
insert into OrderInfo values(2,1002,1002,2,'咸');
insert into OrderInfo values(3,1003,1004,1,'甜');
insert into OrderInfo values(4,1004,1002,1,'酸');
insert into OrderInfo values(5,1005,1002,2,'甜');
insert into OrderInfo values(6,1006创作赢红包SQL Server之索引设计

点餐系统数据库设计--SQL Server

书店管理系统课程设计( sql server+python)

sql server 2005实现树形菜单显示的数据库表怎么设计?

SQL Server 主键设计

设计归档数据的流程 (SQL Server 2005)