我有一条消息和一份合同,消息与许多合同一起发送,合同可以属于多条消息。这不是一个多方面的直接关系。
合同正在具有状态。我应该跟踪每条消息的合同状态。合同开始日期和结束日期也可以根据业务逻辑进行更改,每条消息都应该包含这些值的版本。
合约方仅依赖于ContractID,每条消息不会更改。
因此我制作了这样的ERD: -
合同
消息
MessageContract
多对多关系需要更复杂的逻辑。我可以将Contract列移动到MessageContract并删除Contract表吗?反规范化原则允许我这样做吗?
合同表仅用于保存这三列,它与除MessageContract之外的其他表没有关系,它需要我在将它放入MessageContract之前选择合同,我会做很多因为我有每天20000封邮件。我需要每个处理器周期才能获得良好的吞吐量。我只是担心合同与新表有新关系的情况下的可扩展性。我看不出放置新表的理由,但如果系统是实时的,我只需要添加一个新表。我的意思是这个案子的好习惯是什么。
答案 0 :(得分:1)
每天有20k消息,我认为您的笔记本电脑可以承受这个工作量。在这个要求低的政权中,不要过分担心表现。
保持数据规范化有许多好处,包括更快的写入和更少的错误风险。
合同开始和结束日期也可以根据业务进行更改 逻辑
内联合同表会强制您在许多地方更新这些日期。这是更开发的工作,更慢,更容易出错。这是规范化的主要论据。
我只担心合同有一个案例的可扩展性 与新表的新关系。
在合同中添加新关系将使标准化方法更具吸引力。您不希望将合同数据内联到多个其他表中。
非规范化也是一种有效的技术,但我不认为它适用于您的情况。
我建议您从标准化数据模型开始,将其编入索引并进行快速性能测试。你可能会发现一切都很好。