1.乱穿马路
现象:在一个表键中存放多个值,用,. / \类似的符号隔开
问题:这会让查询.插入和删除的效率变得非常低
解决方案:不要在一个表键中存放多个值,将所有原本在一个表键中的值存放到一张单独的表,在新表中创建两个属性,
一个与原表的主键建立外键关系,一个标明值。例子见表
产品id 经销商
1 张三
1 李四
2 老王
2 老李
3 老刘
id 名字 其他属性
1 电锯
2 锤子
3 镰刀
同样的,这个方法也可以用来存储商品标签
2.单纯的树
现象:在类似于评论树中直接在评论数据后添加一个父节点ID的•属性来记录树形结构
问题:每增加一层查询,就需要额外的联结查询,多个联结查询会让数据库变得非常低效,且易产生孤立节点。
解决方案:闭包表,额外创建一张表格,用来记录树结构间的关系,原书描述的方法实践起来有一定缺陷,在列出树形结构的时候很容易产生困扰,下面是一个个人实践的例子。
r_id 属于文章 ….(内容等)
1 文章1 …
2 文章1 …
3 (这个键应该填文章的主键。) …
父节点 本节点
1 1
1 2
2 3
… …
因为评论树中一个节点的父节点只有一个,而一个父节点的子节点可以有多个,所以,我们记录父节点id即可遍历出评论树。
3主键规范
现象&#x