一、如何从建表来展现自己的能力
在数据库方面,对于java 高级程序员而言,不仅需要会基本的增删改查,而且需要具备一定的“优化”方面的技能。优化是个大话题,可以从索引,建表和SQL 调优(SQL Tuning)方面入手,这个我们来分析下建表时需要注意的优化点。我一般会问候选人,“你有没有设计过数据表?”,大多数回答是设计过,接着我会比较阴险地问下:“你在设计表时是否用到了三泛式”?很多计算机专业的候选人往往会随口回答“是”。这时我就不细问了,同时给候选人写下如下的评语,“该候选人有基本的数据库操作的技能,会增删改查操作,但缺乏专业的数据表设计的能力”。
先来看下三泛式的概念:在第三范式里, 数据不能存在传递关系。比如有张订单流水表,其中包括(订单编号,商品编号,下订单的会员编号,商品名,商品价格,会员姓名,会员手机,会员地址)这些信息。
在这个表里,就存在两个个传递关系。从商品编号能看到商品价格商品名等信息,从下订单的会员编号能看到会员姓名,手机和地址的信息,所以不符合三泛式 。
如果要按经典学院派的三泛式,我们得把这个表拆分成如下3个表。
订单流水表
至少包含订单编号、商品编号和下订单的会员编号
<