表结构设计经验
冗余设计
冗余设计一
一个对象关联另一个对象时,如果另一个对象的名称不经常变化且会有频繁展示的需求那就把另一个对象的名称冗余存储在对象表中。
对扩展开放,对修改关闭
一个课程会关联多种内容,例如:视频,考试,图文课程和内容的关系是多对多
- 方案一:
课程和视频建一张关联表
课程和考试建一张关联表
课程和图文建一张关联表 - 弊端:每新增一种内容都要修改源代码,比如新增操作代码需要再添加if判断是否是新增的哪一种类型,修改同理
- 方案二:
只建立一张关联表通过类型区分不同的内容
例如:Item元素表,itemId和itemType字段
itemId存储关联内容的id,itemType存储关联内容的类型
此时每新增一种内容只要在itemType中新增一种类型即可,新增操作的代码不需要做任何改变,修改同理
其它
市、县、镇3张表进行关联
- 方案一:
市包含多个县,在县中保留一个市id
县包含多个镇,在镇中保留一个县id
弊端:查询市下所有的镇,需要先查询市下的县,再根据县查询镇只能一级一级查询 - 方案二
在镇中保留市的id,这样做可以直接通过市id查询出市下的镇