我正在为 Mail 创建一个数据库,MAIL
表的设计如下:
ID (Surrogate PK)
Recipient/Sender (Coming as FK from `REGISTERED_USERS` table - Recipient if outgoing mail and Sender if incoming mail)
Dispatch/Receive Date
Status (Coming as FK)
PostType (Whether it is Sent or Received mail)
问题
我的问题出在状态列中,因为发送邮件和接收邮件的状态不同(例如,接收邮件为接收状态,已订购、已盖章、已派送等)。
我的方法
我已尝试使用触发器 来实现它,但我想确保使用某些约束是否有更好的解决方案/设计?非常感谢!
最佳答案
这可能是基于意见但是..
您不应该在同一列中存储不同的数据。您应该将所有这些传入/传出列分成两列,并只填写与不同类型邮件相关的列
在您的解决方案中,如果您在 Recipient/Sender
列中有 John,则在检查 PostType 之前您不知道 John 是收件人还是发件人
列,这不是很好的设计。每列都应该是 self 识别的。
我建议将您的设计更改为:
ID
Sender
Recipient
DispatchDate
ReceiveDate
IncomingStatus
OutgoingStatus
PostType
如果您确实需要组合数据以在某处显示,您可以为此目的创建一个 View :
SELECT
CASE WHEN PostType = 1 THEN Sender ELSE Recipient END AS [Recipient/Sender]
CASE WHEN PostType = 1 THEN DispatchDate ELSE ReceiveDate END AS [Dispatch/Receive Date]
等..
(或将它们添加为计算列)
此外,通过分隔列,您还可以为自己腾出一个空间来存储外发邮件的收件人,例如,如果将来需要的话。
关于sql - 数据库表设计-邮件类型的不同状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45530934/