用于数据库规范化的准确表
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 列:
- MailId VARCHAR 主键(不为空)
- Form_Name varchar(50)
- 语言 varchar(10)
- OutPut_Mode varchar(10)
Table FeedBackMessages 列:
Id INT自增主键(不为空)
MailId VARCHAR
Return_Date 日期
Return_Time 日期时间
外键 (MailId) 参考 SentMessages (MailId)
Table 状态 列:
Id Int AutoIncrement 主键(不为空)
MailId VARCHAR
状态 VARCHAR(50)
外键 (MailId) 参考 SentMessages(MailId)
Table 操作 列:
Id Int自增主键(非空)
ActionTaken VARCHAR(100)
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)
我正在考虑如何尽可能准确地规范我数据库中的表。
我必须开发一个监控系统,该系统应该分析发送给客户的所有外发消息(电子邮件、SMS..)及其相关反馈(状态(0,1 或更多))。
这意味着对于 1 条传出消息(对于前 MAILID:123),我可以在不同的时间间隔收到多个不同的反馈(已发送、未送达、已送达、已点击、已打开...)。对于收到的一些反馈,我必须根据 "Action" 检索电子邮件服务提供商所做的事情的信息。他们是否再次向客户发送了电子邮件?如果未发送,他们是否设法解决了服务器问题?等..
编辑:很抱歉,事实上我的 MAIL ID 列都是 VARCHARS(Java 字符串)。长话短说,事实上我必须处理 XML 文件并将它们解组为 Java 对象并将它们保存到我的 Mysql 数据库中,其中 MAIL ID 的形式为 BMM1EP_34022503920_1200180009
澄清一下,我认为我应该有 4 个主表。
Table SentMessages 列:
- MailId VARCHAR 主键(不为空)
- Form_Name varchar(50)
- 语言 varchar(10)
- OutPut_Mode varchar(10)
Table FeedBackMessages 列:
Id INT自增主键(不为空)
MailId VARCHAR
Return_Date 日期
Return_Time 日期时间
外键 (MailId) 参考 SentMessages (MailId)
Table 状态 列:
Id Int AutoIncrement 主键(不为空)
MailId VARCHAR
状态 VARCHAR(50) 外键 (MailId) 参考 SentMessages(MailId)
Table 操作 列:
Id Int自增主键(非空)
ActionTaken VARCHAR(100)
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)