用于数据库规范化的准确表

Accurate tables for Database normalization

我正在考虑如何尽可能准确地规范我数据库中的表。

我必须开发一个监控系统,该系统应该分析发送给客户的所有外发消息(电子邮件、SMS..)及其相关反馈(状态(0,1 或更多))。

这意味着对于 1 条传出消息(对于前 MAILID:123),我可以在不同的时间间隔收到多个不同的反馈(已发送、未送达、已送达、已点击、已打开...)。对于收到的一些反馈,我必须根据 "Action" 检索电子邮件服务提供商所做的事情的信息。他们是否再次向客户发送了电子邮件?如果未发送,他们是否设法解决了服务器问题?等..

编辑:很抱歉,事实上我的 MAIL ID 列都是 VARCHARS(Java 字符串)。长话短说,事实上我必须处理 XML 文件并将它们解组为 Java 对象并将它们保存到我的 Mysql 数据库中,其中 MAIL ID 的形式为 BMM1EP_34022503920_1200180009

澄清一下,我认为我应该有 4 个主表。

Table SentMessages 列:

  1. MailId VARCHAR 主键(不为空)
  2. Form_Name varchar(50)
  3. 语言 varchar(10)
  4. OutPut_Mode varchar(10)

Table FeedBackMessages 列:

  1. Id INT自增主键(不为空)

  2. MailId VARCHAR

  3. Return_Date 日期

  4. Return_Time 日期时间

    外键 (MailId) 参考 SentMessages (MailId)

Table 状态 列:

  1. Id Int AutoIncrement 主键(不为空)

  2. MailId VARCHAR

  3. 状态 VARCHAR(50) 外键 (MailId) 参考 SentMessages(MailId)

Table 操作 列:

  1. Id Int自增主键(非空)

  2. ActionTaken VARCHAR(100)

  3. MailId VARCHAR FOREIGN KEY (MailId) REFERNCES Status(Id)

我的设计不好吗?非常感谢您的帮助,因为这是我第一次为具体项目设计真实的数据库。谢谢大家!

如果您使用半正式的自然语言来定义您的业务领域,它会有所帮助。据我了解:

有 0..n 封电子邮件

每封电子邮件将包含 0..n 个反馈项

每个反馈项有 1 个状态,可能有额外的操作信息。

如果那是准确的,设计应该是这样的:

Table SentMessages with columns:

MailId varchar primary key(not null)
Form_Name varchar(50)
Language varchar(10)
OutPut_Mode varchar(10)

Table FeedBackMessages with columns:

Id INT AutoIncrement primary key (not null)
MailId varchar
Return_Date DATE
Return_Time DATETIME
Status  VARCHAR(50)
ActionTaken VARCHAR(100)
FOREIGN KEY (MailId) REFERENCES SentMessages (MailId)