0..1-to-0..1自引用关系:数据一致性与性能最佳实践咨询
处理0..1-to-0..1自引用关系的最佳实践(数据一致性与性能层面)
我想解决的问题是:在数据一致性与性能层面,处理0..1-to-0..1自引用关系的最佳实践是什么?
我的第一想法是给表添加一个自引用列:
ALTER TABLE Edata_auction ADD COLUMN IF NOT EXISTS extendedWith INT UNSIGNED; ALTER TABLE Edata_auction ADD CONSTRAINT fk_extended_id FOREIGN KEY IF NOT EXISTS (extendedWith) REFERENCES Edata_auction(id);
但仔细思考后,这个方案存在两个明显问题:
- 这实际上是多对一关系,而非我需要的0..1-to-0..1关系
- 我需要在WHERE语句和PHP代码中检查是否有贷款关联到某条记录——是否需要为
extendedWith添加索引?每个索引都会带来额外开销,而且几乎所有贷款都没有自链接,或许有更优的方案?
那我是否应该转而创建一张以(extended_loan_id, extending_loan_id)为复合主键的关联表?当仅指定其中一个ID时,单独通过extended_loan_id或extending_loan_id进行联表、过滤或查询是否高效?
补充业务逻辑:一笔贷款可通过新贷款展期。因此,任意贷款可无关联展期、被其他贷款展期、作为其他贷款的展期贷款,或同时具备两种关联。
内容的提问来源于stack exchange,提问作者Anton Duzenko
相关产品推荐
相关产品推荐

