简单模式:
学生表(ID,姓名,年龄,生日)
学生扩展字段表(ID,扩展字段名称(班级、专业),编码, 扩展字段类型(int,string,arr等))
扩展字段存值表(学生表ID,扩展字段表编码,值)
现在添加一个学生张三{1,张三,22,1999-12-12,八班,计算机科学与技术},这条数据应该怎么插入数据库呢?
首先:将{1,张三,22,1999-12-12}插入学生表。然后在存值表插入两条数据。
这种模式可以随意扩展学生表的字段。
表结构图:
复杂模式:
如下图:
加了一级人员类别,扩展字段作用到人员类别上,这样更加灵活。
类似于电商中的商品分类-扩展设计。每个商品分类都可以有自己的扩展字段
问题:
当学生表数据非常多的时候,查询的时候要先查主表,然后还有根据主表的每一条记录去查存值表中的数据,查询效率慢。
如果筛选条件是字段扩展表中的字段,那么查询的速度将会更慢,因为要先查子表数据,根据子表中取出的学生表ID(还要去重)再去主表中in查询,这效率简直太低了。
解决问题
解决复杂模式设计方案问题
用mongodb来存储人员表和人员扩展字段值表中的数据。
因为mongodb不是关系型数据库,列可以随时扩展,列也可以内嵌数组或者对象。
同时mongodb的查询速度也是非常快速的,对扩展字段的筛选,甚至内嵌数组值的筛选都是非常快速的。
对于不懂mongodb的可以在网上了解它的应用场景。
个人认为mongodb在业务上有扩展字段这个场景就非常适合。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/274538.html