专栏名称: 码农翻身
工作15年的前IBM架构师分享好玩有趣的编程知识和职场的经验教训, 不容错过。
目录
相关文章推荐
程序猿  ·  Python有史以来最强大的挑战者终于出现 ·  7 小时前  
程序员的那些事  ·  程序员:在 8 ... ·  3 天前  
阿里技术  ·  Cursor入门:MCP开发调用和项目实战 ·  2 天前  
程序猿  ·  Spring 之父:我不是 Java ... ·  3 天前  
老刘说NLP  ·  RAG&KG&LLM&文档智能四大领域技术前 ... ·  3 天前  
51好读  ›  专栏  ›  码农翻身

张大胖学数据库

码农翻身  · 公众号  · 程序员  · 2016-12-05 19:57

正文

请到「今天看啥」查看全文


“你要是参加工作了, 设计出这样的数据库表, 老板非骂死你不可。  你要记住呀, 我们关系数据库最忌讳的就是在一个单元格里存储多个值。 这是典型的‘非规范化’的设计”


“非规范化?  那怎么办? ”


“拆分, 把它拆成规范化的 ” 说着,Bill 搞了两个表格出来:


(表3: 订单表)

(表4: 订单细节表)


“明白了, 这样的拆分就可以保证一个单元格只有个值了” 张大胖说。


“这种形式的表, 我们就叫做 第一范式 ,  不止如此, 你看看表格3 订单表, 是不是一个订单号就能唯一的确定一行? ”


“对, 订单表确实是这样的, 但是表格4 单单用订单号就不行了, 还得加上产品编码, 才能确定同一行的其他值。”


Bill 说: ”所以我们说表3的主键是 (订单号), 表4的主键是(订单号,产品编码), 这是一个复合主键“


大胖高兴的说: “啊, 这第一范式看来很简单嘛”


“别急, 你再看看表格4:订单细节表, 虽然说 (订单号,产品编码) 是主键, 能确定其他属性的值, 但是 产品名称和单价  实际上并不依赖于 订单号。  如果我们想添加一个新的产品比如ipad, 你会发现没法放入这张表, 因为没有订单号!








请到「今天看啥」查看全文