面试题答案
一键面试适合范式与反范式混用的场景
- 订单系统:在订单相关表设计时,订单基本信息(订单号、下单时间、客户ID等)按范式设计,存放在
orders
表中。而订单详情(订单号、商品ID、商品名称、数量、价格等),对于商品名称等信息,若商品信息变动不频繁,可反范式处理,将商品名称冗余存放在订单详情表中。因为查询订单详情时,无需再关联商品表就能直接获取商品名称,提高查询效率。 - 新闻系统:新闻表按范式设计存放新闻基本信息(新闻ID、标题、发布时间等)。对于新闻作者信息,如果作者信息相对固定,可反范式将作者姓名等冗余存放在新闻表中,避免每次查询新闻时都要关联作者表。
混用的优势
- 提高查询性能:减少多表关联操作,例如上述订单系统,查询订单详情直接从订单详情表获取商品名称,无需关联商品表,加快查询速度。
- 简化开发:开发过程中,无需复杂的多表关联逻辑,降低代码编写难度,提高开发效率。
可能带来的问题
- 数据冗余:如订单详情表冗余商品名称,若商品名称修改,需要同时更新商品表和订单详情表,增加维护成本,且占用更多存储空间。
- 数据一致性问题:若更新数据时,只更新了一处冗余数据,未更新其他地方,就会导致数据不一致,影响数据的准确性和业务逻辑。