邮件管理数据库设计--MySQL

邮件管理数据库设计--MySQL

友情链接

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

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

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

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

3、点餐系统数据库设计–SQL Server

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

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. 项目背景及需求分析

1.1 项目背景

电子邮件在企业中被广泛的应用,员工、客户等之间沟通交流、业务往来一般都会采用电子邮件。但是由于很多企业缺乏管理电子邮件的意识,导致大量电子邮件管理混乱,并且存在一定的业务数据安全隐患。为了使企业能够高效、安全、稳定的应用电子邮件,提升公司的管理、业务、客户服务水平,提高企业内部信息沟通效率,设计一款邮件管理系统数据库,保证工作对内沟通、对外业务高效运行。

1.2 需求分析

1.2.1 信息需求

对企业而言,邮件管理是管理工作中重要的一环,但是企业的邮件工作量大、繁杂,人工处理非常困难。因此,借助于强大计算机的处理能力,能够把人从繁重的邮件管理工作中解脱出来,并且更加准确、安全、清晰的管理环境。

1.2.2 功能需求

能够进行数据库的数据定义、数据操纵、数据控制等处理功能。具体功能应包括:可提联系人信息管理、邮件信息管理,包括添加、插入、删除、更新、查询,回信邮件标识,员工及客户联系信息查询的功能。

1.2.3 安全性与完整性要求

对于邮件管理系统数据库来说,由于其主要数据是邮件和联系人信息,只能由发件人、收信人以及相关抄送人知道,因此做好数据安全性是重中之重。另外,要求所有员工的邮件信息都要录入其中,并且要设计好个别情况。

2. 概念结构设计

概念结构设计是整个数据库设计的关键,它通过对用户需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型。
根据邮件信息管理数据库设计需求抽象出联系人、电子邮件、收件人集合、抄送人集合四个实体,联系人和电子邮件为强实体,收件人集合和抄送人集合为弱实体,两者依赖于联系人和电子邮件而存在。对四个实体之间的关系进行分析如下:
一个联系人会收发多封电子邮件,一封电子邮件可能会被多个人接收,所以联系人与电子邮件之间是多对多(m:n)的关系;
一个联系人可能属于多个收件人集合,一个收件人集合可能包含多个联系人,所以联系人与收件人集合是多对多(m:n)的关系;
同上,一个联系人可能属于多个抄送人集合,一个抄送人集合可能包含多个联系人,所以联系人与抄送人集合是多对多(m:n)的关系;
一封电子邮件会被一个收件人集合接收(这里收件人集合作为一个整体,一个集合可能包含多个收件人),一个收件人集合可能会接收多封电子邮件,所以电子邮件与收件人集合是多对一(n:1)的关系;
同上,一封电子邮件会被一个抄送人集合接收(这里抄送人集合作为一个整体,一个集合可能包含多个抄送人),一个抄送人集合可能会接收多封电子邮件,所以电子邮件与抄送人集合是多对一(n:1)的关系;

2.1 抽象出系统实体

联系人(用户ID、用户名、Email、电话、联系地址);
电子邮件(邮件ID、邮件标题、发件人ID、邮件发送时间,邮件内容、被回复邮件ID);
收件人集合(收件ID、邮件ID、收件人ID);
抄送人集合(抄送ID、邮件ID、收件人ID);

2.2 全局E-R图

在这里插入图片描述

3. 逻辑结构设计

3.1 关系模式

E-R图向关系模型转化要解决的问题是如何将实体型和实体间的联系转化为关系模式,如何确定这些关系模式的属性和码。
设计邮件管理数据库,包括联系人(contacts)、电子邮件(emails)、收件人集合(mail_recipients)、抄送人集合(copy_recipients)四个实体,其关系模式中对每个实体定义属性如下:
contacts 表:用户id(uid)、用户名(uname)、Email(email)、电话(cellphone)、联系地址(address),此为实体“contacts 表”所对应的关系模式,用户id为该关系的候选码,满足第三范式;
emails表:邮件id(eid)、邮件标题(title)、发件人id(uid)、邮件发送时间(create_time)、邮件内容(textbody)、被回复邮件id(reply_eid),此为实体“emails表”所对应的关系模式,邮件id为该关系的候选码,满足第三范式;
mail_recipients表:收件id(mid)、邮件id(eid)、收件人id(uid),此为实体“mail_recipients表”所对应的关系模式,收件id为该关系的候选码,满足第三范式;
copy_recipients表:抄送id(cid)、邮件id(eid)、收件人id(uid),此为实体“copy_recipients表”所对应的关系模式,抄送id为该关系的候选码,满足第三范式。

3.2 表结构

数据库中包含4个表,即联系人(contacts)、电子邮件(emails)、收件人集合(mail_recipients)、抄送人集合(copy_recipients)。

contacts表的表结构
在这里插入图片描述

emails表的表结构
在这里插入图片描述

mail_recipients表的表结构
在这里插入图片描述

copy_recipients表的表结构
在这里插入图片描述

4. 物理设计和实施

4.1 数据库及表创建

4.1.1 创建数据库

-- 如果已有该数据库,则删除
DROP DATABASE IF EXISTS EmailManagement;
-- 创建数据库
CREATE DATABASE EmailManagement CHARSET=UTF8;
-- 使用数据库
USE EmailManagement;

4.1.2 创建数据表

-- 创建数据表
-- table 1: contacts

DROP TABLE IF EXISTS contacts;
CREATE TABLE contacts(
uid INT(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT NOT NULL,
uname VARCHAR(25),
email VARCHAR(50),
cellphone BIGINT(11),
address VARCHAR(100)
);

-- 设置CHECK 约束
ALTER TABLE contacts ADD CHECK (cellphone>0);

-- table 2: emails
DROP TABLE IF EXISTS emails;
CREATE TABLE emails(
eid INT(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT NOT NULL,
title VARCHAR(120),
uid INT(10) UNSIGNED NOT NULL,
create_time DATETIME,
reply_id INT(10),
textbody TEXT,
FOREIGN KEY(uid) REFERENCES contacts(uid)
);

-- table 3: mail_recipients
DROP TABLE IF EXISTS mail_recipients;
-- 需要完整代码请添加文章底部微信,付费咨询

-- table 4: copy_recipients
DROP TABLE IF EXISTS copy_recipients;
-- 需要完整代码请添加文章底部微信,付费咨询

4.2 表数据插入

4.2.1 插入数据

-- 插入数据
INSERT INTO contacts VALUES
(0, "冯二", "abc123@126.com", 13288886666, "北京市海淀区雪花大道博信国际大厦1楼101"),
-- 需要完整代码请添加文章底部微信,付费咨询

4.2.2 测试约束

-- 测试CHECK约束
INSERT INTO contacts VALUES
(0, "周三", "sdfghj@126.com", -1528886666, "北京市海淀区雪花大道博信国际大厦9楼909");

– CHECK约束测试结果如下:
CHECK约束正常,在cellphone字段插入负数时,约束生效并报错。
在这里插入图片描述

4.2.3 插入其他表数据

INSERT INTO emails (eid, title, uid, create_time, textbody) VALUES 
-- 需要完整代码请添加文章底部微信,付费咨询

-- 插入回复邮件信息
INSERT INTO emails (eid, title, uid, create_time, reply_id, textbody) VALUES 
-- 需要完整代码请添加文章底部微信,付费咨询

INSERT INTO mail_recipients VALUES
-- 需要完整代码请添加文章底部微信,付费咨询

INSERT INTO copy_recipients VALUES
-- 需要完整代码请添加文章底部微信,付费咨询

4.3 查询测试

– 1.查询联系人中姓 赵 的人有哪些,显示其所有信息

SELECT * FROM contacts WHERE uname LIKE "赵%";

查询结果:
在这里插入图片描述

– 2.查询回复过邮件的人有哪些,显示:用户编号id、姓名、和回复邮件的数量

SELECT 	 e.uid,
		 c.uname,
-- 需要完整代码请添加文章底部微信,付费咨询

查询结果:
在这里插入图片描述

– 3.查询抄送人数量之和达到3人及以上的邮件有哪些,要求显示:邮件id、邮件主题、邮件内容

SELECT 	 e.eid,
		 e.title,
		 e.textbody
-- 需要完整代码请添加文章底部微信,付费咨询

结果如下:
在这里插入图片描述

– 4.查询被回复过的邮件的回复耗时,要求显示:用户姓名、邮件主题、回复耗时

SELECT 	 c.uname,
		 e1.title,
-- 需要完整代码请添加文章底部微信,付费咨询

结果如下:
在这里插入图片描述

– 5.查询用户收发邮件数据量,要求显示:用户ID、用户姓名、发件数量、收件数量

SELECT   e.uid,
		 c.uname,
-- 需要完整代码请添加文章底部微信,付费咨询

结果如下:
在这里插入图片描述


原文连接:https://blog.csdn.net/Artificial_idiots/article/details/122094148

相关推荐

领域驱动设计:事件溯源架构简介

Figma自编教程第三篇(也是做产品实习生的第三天)

Flutter 绘制探索 | 箭头端点的设计

为什么设计的软件不好用?那是因为不熟悉软件开发模型!一文熟悉软件开发模型

Netty 案例之 IM 方案设计

【设计模式】责任链模式(Chain of Responsibility Pattern)

VGA设计(原理说明。Verilog代码实现,仿真结果)

提升UI产品体验的14个细节!你都知道吗?

【毕业设计】深度学习 opencv python 实现中国交通标志识别

TiFlash 源码阅读(五) DeltaTree 存储引擎设计及实现分析 - Part 2

还记得当年的超级玛丽么?来吧,动手设计一款小霸王游戏机

Figma自编教程第二篇(也是做产品实习生的第二天)

【毕业设计】python+大数据构建疫情可视化分析系统

Go的错误处理设计

Figma自编教程第一篇(也是做产品实习生的第一天)

【设计模式】模板模式,学会它咱也写出优雅健壮的代码!

从全局角度,如何设计一个秒杀系统?

【分享】从Mybatis源码中,学习到的10种设计模式

【干货】MySQL底层架构设计,你了解多少?

【C++】从设计原理来看string类