在实际工作中,数据库数据模型的建立和选择对数据的“增删改查”具有直接影响,从基本角度来讲,数据模型具有“范式化”和“反范式化”两种,而在实际工作场景中,常依赖实际情况采取这两种模型混用。
范式化
范式化模型要求满足下面三大范式:
1. 每个字段只包含最小的信息属性。如果某个字段名称为name-age,value为zhangsan-23,则这个模型不满足第一范式,需要将name-age分为两个属性name和age后才满足第一范式。
2. (在满足第一范式基础上)模型含有主键,非主键字段依赖主键。比如订单这个模型,它的主键是订单ID,那么订单模型其它字段都应该依赖于订单ID,如商品ID和订单没有直接关系,则这个属性不应该放到订单模型而应该放到”订单-商品”中间表。
3. (在满足第二范式基础上)模型非主键字段不能相互依赖。订单表(订单编号,定购日期,顾客编号,顾客姓名,……),初看该表没有问题,满足第二范式,每列都和主键列”订单编号”相关,再细看你会发现”顾客姓名”和”顾客编号”相关,”顾客编号”和”订单编号”又相关,最后经过传递依赖,”顾客姓名”也和”订单编号”相关。为了满足第三范式,应去掉”顾客姓名”列,放入客户表中。
示例:
{
"_id" : ObjectId("5124b5d86041c7dca81917"),
"title" : "如何使用MongoDB",
"author" : [
ObjectId("144b5d83041c7dca84