SQL反模式(一)

欢迎参考 SQL反模式(前言)的数据库设计

此文章只是给自己做一个小抄,如有冒犯,还忘见谅


1. 乱穿马路

背景: 每个产品将指定多个联系人,此时可以将数据库中原来储存单一用户标识的字段改成使用逗号分隔的用户标识列表,但存在添加的联系人的数量有限的问题
SQL反模式(一)

如何识别反模式:

SQL反模式(一)

1. 目标: 存储多值属性

2. 解决方案:创建一张交叉表
将 account_id 存储在一张单独的表中,而不是存储在 Products 表中,从而每个独立的 account 值都可以占据一行。这张新表称为 Contacts,实现了 Porducts 和 Accounts 的多对多关系
SQL反模式(一)
3. 使用交叉表的好处:

SQL反模式(一)

2. 单纯的树:

背景:
SQL反模式(一)

如何识别反模式:
SQL反模式(一)
SQL反模式(一)

1. 目标: 分层储存与查询
引言:存在递归关系的数据很常见,数据会像树或者以层级方式组织。在树形结构中,实例被成为节点(node)。 每个节点有多个子节点和一个父节点。最上层的节点叫根(root)节点。 最底层的没有子节点的节点叫叶(leaf)。 而中间的节点简单的成为 非叶(nonleaf)
如: 组织架构图线性化讨论
2. 解决方案:

邻接表:

SQL反模式(一)
SQL反模式(一)


路径枚举

SQL反模式(一)
SQL反模式(一)


嵌套集

SQL反模式(一)
SQL反模式(一)
SQL反模式(一)


闭包表

SQL反模式(一)
SQL反模式(一)
SQL反模式(一)


选择设计

SQL反模式(一)