💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
三范式: ① 一范式:原子性,数据不可以再分割 ② 二范式:数据没有冗余 order goods ida 编号1 下单时间 商品信息1 商品价格 商品描述 商品产地 idb 编号1 下单时间 商品信息2 商品价格 商品描述 商品产地 idb 编号1 下单时间 商品信息3 商品价格 商品描述 商品产地 订单表 id 编号1 下单时间 g1,g2,g3 ③ 三范式 数据表每个字段与当前表的主键产生直接关联(非间接关联) userid name height weight orderid 编号 订单时间 优化: userid name height weight userid orderid orderid 编号 订单时间 数据库设计需要遵守三范式。 两个数据表:商品表Goods、分类表Category Goods: id name cat\_id price 101 iphone6s 2003 6000 204 海尔冰箱 4502 2000 ...... Category: cat\_id name goods\_num 2003 手机 4502 冰箱 ..... 需求: 计算每个分类下商品的数量是多少? select c.cat\_id,c.name,count(c.\*) from category as c left join goods as g on g.cat\_id=c.cat\_id; 上边sql语句是一个多表查询,并且还有count的聚合计算。 如果这样的需求很多,类似的sql语句查询速度没有优势, 如果需要查询速度提升,最好设置为单表查询,并且没有聚合计算。 解决方法是:给Category表增加一个商品数量的字段goods\_num 那么优化后的sql语句: select cat\_id,name,goods\_num from category; 但是需要维护额外的工作:goods商品表增加、减少数据都需要维护goods\_num字段的信息。 以上对经常使用的需求做优化,增加一个goods\_num字段,该字段的数据其实通过goods表做聚合计算也可以获得,该设计不满足三范式,因此成为”逆范式”.