customer和room这两个表都存在一些与该表没有直接关系

2024-02-09 05:38

本文主要是介绍customer和room这两个表都存在一些与该表没有直接关系,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

经过几天给韶关某个高校进行数据库设计的实训,对数据库设计的过程有了更加深刻的理解。

一、数据库设计的步骤
(1)了解功能需求
在设计数据库之前,设计人员必须要先了解系统的功能需求。这里可以通过阅读产品需求规格说明书,与项目相关人员(比如项目经理、客户等)进行充分沟通。

(2)定义实体
了解系统功能需求之后,设计人员通过分析系统功能定义出系统有哪些实体。比如:到酒店开房。这里应该至少包含两个实体:客人和房间。
在定义出实体以后,我们还要定义实体的属性。例如:
客人:姓名、性别、手机号码、证件号码、证件类型(身份证、驾驶证、通行证等等)…
房间:房号、房间类型(单人房、双人房、豪华房等等)、入住时间、离开时间、房间状态(已入住、未入住)…

(3)绘制E-R图
定义好实体之后,接下来我们应该根据实体以及实体之间的关系绘制出E-R图。比如:

长方形代表实体,椭圆形代表实体的属性,菱形代表实体之间的关系。

(4)把E-R图转换成模型
绘制出E-R图之后,我们需要根据它来构建物理模型。构建物理模型可以使用一些工具,比如目前比较流行的PowerDesigner。

(5)检查模型
完成模型设计后,我们还要检查模型是否满足第三范式的要求。如果不满足就需要重新对模型进行修正,直到满足第三范式的要求为止。

比如说,上面的模型并没有满足第三范式的要求。因为customer和room这两个表都存在一些与该表没有直接关系的字段。如果要满足第三范式要求,就需要把模型修改为:

上面模型增加了三个表,分别是identity_type(证件类型表)、register(入住登记表)、room_type(房间类型表),经过对模型的修正后,已经满足第三范式的要求。

(5)根据模型定义数据库
不同数据库的SQL命令可能会有小小差别。比如我们这里使用了MySQL数据库。

定义数据库的命令:DDL

#创建数据库
create database 数据库名;

#删除数据库
drop database 数据库名;

#查询数据库
show databases;

#选定数据库
use 数据库名;

#创建表
create table 表名 (
列名 数据类型 [primary key] [auto_increment],
列名 数据类型 [not null] [unique] [default ‘默认值’] [comment ‘字段说明’],
列名 数据类型 [not null] [unique] [default ‘默认值’] [comment ‘字段说明’],

[constraint 外键名 foreign key(外键列) references 表名(主键列) [on update|delete cascade]]
);

#删除表
drop table 表名;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
下面根据模型定义数据库:

#创建数据库
create database hotel;

#查询数据库
show databases;

#选定数据库
use hotel;

#证件类型表
create table identity_type (
identity_type_id int primary key auto_increment,
identity_type_name varchar(50) not null comment ‘证件类型名称’
);

#客人表
create table customer (
cust_id int primary key auto_increment,
cust_name varchar(255) not null unique default ‘’ comment ‘客人名称’,
mobile varchar(11) default ‘’ comment ‘手机号码’,
identity_num varchar(50) not null unique default ‘’ comment ‘证件号码’,
identity_type_id int not null comment ‘外键列,引用证件类型表’,
constraint fk_cust_identity_type foreign key(identity_type_id) references identity_type(identity_type_id)
);

#房间类型
create table room_type (
room_type_id int primary key auto_increment,
room_type_name varchar(50) not null comment ‘房间类型名称’
);

#房间
create table room (
room_id int primary key auto_increment,
room_num varchar(10) not null comment ‘房号’,
room_type_id int not null comment ‘外键列,引用房间类型表’,
status int not null comment ‘房间状态,1代表未入住,2代表已入住’,
constraint fk_room_type foreign key(room_type_id) references room_type(room_type_id)
);

#入住登记表
create table register (
cust_id int not null comment ‘外键,引用客人表’,
room_id int not null comment ‘外键,引用房间表’,
in_time datetime not null comment ‘入住时间’,
out_time datetime comment ‘离开时间’,
constraint fk_register_cust foreign key(cust_id) references customer(cust_id),
constraint fk_register_room foreign key(room_id) references room(room_id)
)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
至此,数据库设计阶段的任务已经完成。

二、总结
数据库设计其实并不难,本人觉得比较难的地方在于开始的分析阶段。就是如何根据客户需求把数据库里面的实体,以及实体之间的关系分析出来。所以,在数据库设计阶段,我们应该把重点放在业务需求的分析上,准确把握客户的需求,这样才能够设计出一套比较好的数据库。

作者:伤心程序员
来源:CSDN
原文:https://blog.csdn.net/zhongliwen1981/article/details/91871895
版权声明:本文为博主原创文章,转载请附上博文链接!

这篇关于customer和room这两个表都存在一些与该表没有直接关系的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/693267

相关文章

Tomcat版本与Java版本的关系及说明

《Tomcat版本与Java版本的关系及说明》:本文主要介绍Tomcat版本与Java版本的关系及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Tomcat版本与Java版本的关系Tomcat历史版本对应的Java版本Tomcat支持哪些版本的pythonJ

MySQL INSERT语句实现当记录不存在时插入的几种方法

《MySQLINSERT语句实现当记录不存在时插入的几种方法》MySQL的INSERT语句是用于向数据库表中插入新记录的关键命令,下面:本文主要介绍MySQLINSERT语句实现当记录不存在时... 目录使用 INSERT IGNORE使用 ON DUPLICATE KEY UPDATE使用 REPLACE

C语言实现两个变量值交换的三种方式

《C语言实现两个变量值交换的三种方式》两个变量值的交换是编程中最常见的问题之一,以下将介绍三种变量的交换方式,其中第一种方式是最常用也是最实用的,后两种方式一般只在特殊限制下使用,需要的朋友可以参考下... 目录1.使用临时变量(推荐)2.相加和相减的方式(值较大时可能丢失数据)3.按位异或运算1.使用临时

java两个List的交集,并集方式

《java两个List的交集,并集方式》文章主要介绍了Java中两个List的交集和并集的处理方法,推荐使用Apache的CollectionUtils工具类,因为它简单且不会改变原有集合,同时,文章... 目录Java两个List的交集,并集方法一方法二方法三总结java两个List的交集,并集方法一

python安装whl包并解决依赖关系的实现

《python安装whl包并解决依赖关系的实现》本文主要介绍了python安装whl包并解决依赖关系的实现,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录一、什么是whl文件?二、我们为什么需要使用whl文件来安装python库?三、我们应该去哪儿下

Python如何计算两个不同类型列表的相似度

《Python如何计算两个不同类型列表的相似度》在编程中,经常需要比较两个列表的相似度,尤其是当这两个列表包含不同类型的元素时,下面小编就来讲讲如何使用Python计算两个不同类型列表的相似度吧... 目录摘要引言数字类型相似度欧几里得距离曼哈顿距离字符串类型相似度Levenshtein距离Jaccard相

使用Navicat工具比对两个数据库所有表结构的差异案例详解

《使用Navicat工具比对两个数据库所有表结构的差异案例详解》:本文主要介绍如何使用Navicat工具对比两个数据库test_old和test_new,并生成相应的DDLSQL语句,以便将te... 目录概要案例一、如图两个数据库test_old和test_new进行比较:二、开始比较总结概要公司存在多

C#比较两个List集合内容是否相同的几种方法

《C#比较两个List集合内容是否相同的几种方法》本文详细介绍了在C#中比较两个List集合内容是否相同的方法,包括非自定义类和自定义类的元素比较,对于非自定义类,可以使用SequenceEqual、... 目录 一、非自定义类的元素比较1. 使用 SequenceEqual 方法(顺序和内容都相等)2.

MYSQL关联关系查询方式

《MYSQL关联关系查询方式》文章详细介绍了MySQL中如何使用内连接和左外连接进行表的关联查询,并展示了如何选择列和使用别名,文章还提供了一些关于查询优化的建议,并鼓励读者参考和支持脚本之家... 目录mysql关联关系查询关联关系查询这个查询做了以下几件事MySQL自关联查询总结MYSQL关联关系查询

电脑没有仿宋GB2312字体怎么办? 仿宋GB2312字体下载安装及调出来的教程

《电脑没有仿宋GB2312字体怎么办?仿宋GB2312字体下载安装及调出来的教程》仿宋字体gb2312作为一种经典且常用的字体,广泛应用于各种场合,如何在计算机中调出仿宋字体gb2312?本文将为您... 仿宋_GB2312是公文标准字体之一,仿China编程宋是字体名称,GB2312是字php符编码标准名称(简