【发布时间】:2011-11-01 00:29:51
【问题描述】:
这可能不完全是一个“规范化”问题,它更像是我要保存的数据类型。
我刚刚完成了消息和电子邮件系统的规范。我的想法是我需要保存我的网络服务内部的所有消息,但还要知道是否已经发送了包含该消息的电子邮件。
这是规范。
规格
- 所有消息都存储在一个表中。
-
消息可以来自未注册用户或注册用户。
未注册的用户消息将只有一个返回电子邮件地址
注册的用户消息将具有发件人的用户 ID
-
消息要么归用户所有(意味着它们是收件人),要么消息由用户角色共享。
-
当一条消息归用户所有时,我们会记录有关这条消息的一些信息(与消息相同的表)。
a) 用户是否打开/阅读了消息?
b) 是一封_电子邮件_发送给邮件的所有者还是只是一封内部邮件
c) 首次阅读邮件的日期
d) 发送消息的日期
-
当消息被发送给一组用户时,意味着他们被发送给“所有用户”、“所有所有者”或“所有超级管理员”......
a) 消息在
messages表中保存一次,并带有发送日期b) 在单独的表格中跟踪每个打开的个人
c) 字段记录是否直接发送_电子邮件_,或者是否只是在系统内部保存。 (单独的表格)
-
消息可以被线程化,这意味着如果一条消息得到响应,则它是子消息或原始消息。
消息有不同的“类型”,意味着消息可以是“系统通知”、“查询”、“个人消息”、“私人消息”、“交易信息”
链接到产品查询的消息将保存他们正在查询的产品的 ID。 (即相关财产)。
结束规范
现在是真正的问题...
正如您在项目符号 1)(b) 中看到的那样,如果还为该消息发送了一封电子邮件,我正在录制发送给个人用户的消息。
但是,当向一组用户发送电子邮件时,我会记录电子邮件是否是在完全不同的表中发送的。 显然是因为我无法将这些信息保存在同一张表中。
您对此模型有何看法。我不是在复制任何数据,而是在分隔数据的保存位置。我是否应该有一个 email_sent 表来记录所有这些信息。
【问题讨论】:
标签: mysql data-structures normalization