以省市区县四级联动为例:
方案一:
建立多个数据库表,低级表结构中只包含上一级表中id。
省表 | 市表 | 区表 | 县表 |
province | city | district | county |
id | province_id | city_id | district_id |
优点:
- 此设计完全解开了各层之间的耦合性,用类似于链表的形式将多层数据关系起来。
- 可以节约大量的数据库空间。
- 维护方便。如果发生了新增和修改操作时,只要修改与之相关的那个表的主键即可。
缺点:
- 跨级查询效率低下。如查询河北省下有哪些县,需要查询三次涉及三张表才能查到结果。
方案二:
也就是方案一的改进版,低级表持有所有高级表的id,从而获得查询性能上的提升。
省表 | 市表 | 区表 | 县表 |
province | city | district | county |
id | province_id | city_id | district_id |
| | province_id | city_id |
| | | province_id |
优点:
- 跨级查询性能较高。
缺点:
- 表结构混乱,冗余字段增加,占用较多数据库空间。
- 新增和删除操作复杂,效率不高,维护性差,需要考虑数据完整性和一致性。
方案三:
方案二的改进版,采用自关联(递归)的方式设计。
id | pid | name |
1 | 0 | 河北省 |
2 | 1 | 唐山市 |
3 | 1 | 保定市 |
4 | 2 | 迁安县 |
6 | .. | .. |
优点:
- 节省数据库空间,表结构清晰,容易维护。
- 无限级别的层次关系,扩充性强。
缺点:
- 不能明确看出层次关系,无法实现排序。
- 跨级查询效率不高。
方案四:
待补充。