经验-设计表结构

本文探讨了冗余设计在对象关联中的利弊,并对比了两种方案:一是为不同内容类型分别创建关联表,导致扩展性受限;二是使用统一的Item元素表和itemType区分,易于扩展。针对市、县、镇关联问题,提出了直接存储上级ID的解决方案,以提高查询效率。讨论了如何在保证灵活性的同时保持代码维护的简洁性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

冗余设计

冗余设计一

一个对象关联另一个对象时,如果另一个对象的名称不经常变化且会有频繁展示的需求那就把另一个对象的名称冗余存储在对象表中。

对扩展开放,对修改关闭

一个课程会关联多种内容,例如:视频,考试,图文课程和内容的关系是多对多

  • 方案一:
    课程和视频建一张关联表
    课程和考试建一张关联表
    课程和图文建一张关联表
  • 弊端:每新增一种内容都要修改源代码,比如新增操作代码需要再添加if判断是否是新增的哪一种类型,修改同理
  • 方案二:
    只建立一张关联表通过类型区分不同的内容
    例如:Item元素表,itemId和itemType字段
    itemId存储关联内容的id,itemType存储关联内容的类型
    此时每新增一种内容只要在itemType中新增一种类型即可,新增操作的代码不需要做任何改变,修改同理

其它

市、县、镇3张表进行关联

  • 方案一:
    市包含多个县,在县中保留一个市id
    县包含多个镇,在镇中保留一个县id
    弊端:查询市下所有的镇,需要先查询市下的县,再根据县查询镇只能一级一级查询
  • 方案二
    在镇中保留市的id,这样做可以直接通过市id查询出市下的镇
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值