我进退两难了。我正在处理大量遗留代码,并且在表结构中看到大量冗余信息。它们主要以两种形式存在:
A. 要保存在“连接”上的冗余信息。例如:
event_id, event_name, event_creator_id
3 test1 43
subevent_id, event_id, event_creator_id
21 3 43
请注意 event_creator_id 的重复性。以前的“高级”开发人员给出的理由是,当我们需要事件创建者 id 时,我们只需要查询一个表,而不是进行“昂贵的”连接来检索值。
B. 节省计算的冗余信息。例如:
event_id, event_default_price
3 100
discount_id, discount_code, discount_percentage
7, ABCD, 50
special_event_id, event_id, discount_id, discounted_price
21 3 7, 50
请注意,不是为这个特殊事件计算最终的“discounted_price”(因为对 discount_id 的引用已经存在),代码将“计算”值保存在这里。同样,理由是“速度”,常态下地狱。
我有两个问题:
- 我可以告诉新开发人员这些结构没有标准化,但他们可以说它更快。我该如何反击?我反对吗?其他人是否像这样构建他们的数据库?!
- 有没有一个经验法则或一套原则,我可以用来说 - “哦,它会更慢,但只有 1%,所以可以这样做”等等?