邮件程序的 Mysql 关系数据库

标签 mysql database-design

我想为 PHP 邮件应用程序创建一个数据库,该程序将允许用户登录,一旦用户登录到系统,他们将能够写入发送至:电子邮件、主题、来自并选择 HTML 模板表单下拉列表菜单。我非常了解如何完成这些任务,但因为我不太擅长设计数据库,所以我决定在这里寻求帮助。

所以我已经识别了 3 个表:

Users[id, firstname, lastname, email, password] 
Message[id, send_to, subject, template_used, from, date, ip_address] 
Template[id, temp_name, temp_html].

我正在努力了解关系数据库概念,但这就是我的看法:

用户 1..* -----------1..* 消息,消息 1..1 ----------- 1..1 模板, 模板 1..1--------1..* 用户

不确定这些关系,以及用户和消息之间的关系是否正确,这是否是两个表为 1..*..... 的问题?

最佳答案

一个好的关系模型数据库要求表至少符合第三规范化规则(3N)。请阅读有关 1N 2N 3N 的内容。目前,即现有的关系应减少到(一到许多)。如果你期待一个精彩的 RD,就不可能有多对多。 我们来分析一下user和messages表的关系: 情况一: 一个用户可以有多条消息,即(用户----消息)----(一对多) 一条消息可以针对多个用户,即(消息-----用户)-----一对多 这意味着给用户的消息具有多对多的关系。根据规范化规则,这是不正确的(为了引用完整性)。 可以通过引入另一个充当中介的表来避免这种情况,称之为(messageuser)。该表将包含消息外键和用户外键的主键,因为它是主键,因此是复合键。 因此我们注意到什么:

(图:简单插图 - 非标准)-抱歉,我无法根据网站的规则和政策上传图片来向您展示这一点。

我们现在有三个表,每个表都有两种关系(一对多)。 即用户到用户消息(一个用户有一 strip 有其 id 的消息)和到用户的消息(一条消息发送给具有特定 id 的一个用户)。 那不是很好吗?

关于邮件程序的 Mysql 关系数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21205305/

相关文章:

php - 数据库查询不起作用,Wordpress

php - 分割一个巨大的表

SQL存储过程设计问题

cocoa - 核心数据实体中可本地化属性值的模型?

mysql - 将 $ 字符附加到 MySQL DB 字段,使长度增加 40 %

mysql - 使用加载数据添加值

mysql - Docker 无法通过套接字连接到本地 MySQL 服务器

sql - 不同产品价格范围的数据库模型

mysql - 如何在 CakePHP 中处理具有多个地址的客户

php - 子查询返回多行