我有一个 Message 和一个 Contract,Message 是和很多个 contract 一起发送的,一个 Contract 可以属于几个 message。这不是一个直接的多对多关系。
合同是有状态的。我应该跟踪每条消息的合同状态。合同开始和结束日期也可以根据业务逻辑进行更改,并且每条消息都应该有这些值的版本。
合同方仅取决于 ContractID,不会因每条消息而更改。
因此我制作了这样的ERD:-
合同
- 合同编号
- 第一方
- 第二方
- 批准日期
信息
- 消息ID
- 消息日期
消息合约
- 合同编号
- 消息ID
- 合同状态
- 合同开始日期
- 合同结束日期
多对多关系需要更复杂的逻辑。我可以将合同列移动到 MessageContract 并删除合同表吗?非规范化原则允许我这样做吗?
合同表仅用于保存这三列,它与除 MessageContract 之外的其他表没有关系,它要求我在将其放入 MessageContract 之前选择一个合同,我会经常这样做,因为我有 20,000 条消息每天。我需要每个处理器周期来获得良好的吞吐量。我只是担心合同与新表有新关系的情况下的可伸缩性。我看不出放置新表的理由,但是如果系统处于活动状态并且我只需要添加一个新表怎么办。我的意思是这种情况下的良好做法是什么。