关系型数据库存储树形结构

一般比较普遍的就是四种方法:(具体见 SQL Anti-patterns这本书)

  • 邻接表(Adjacency List):每一条记录存parent_id,设计实现简单,但是查询子树复杂。
  • 枚举路径(Path Enumerations):每一条记录存整个tree path经过的node枚举,增删改查都较简单,查需要使用like,不能无限扩展。
  • 嵌套表(Nested Sets):每一条记录存 nleft 和 nright,不直观,设计实现都非常复杂。
  • 闭包表(Closure Table):维护一个表,所有的tree path作为记录进行保存。比较折中的一种设计。

四种方法比较

Read More

逻辑删除

  • 物理删除,又称硬删除、真删除,即删除操作是将数据记录直接从数据库删除。
  • 逻辑删除,又称软删除、假删除,通过添加删除标记或者将要删除的数据记录移动到另一张表的方式实现。好处就是对于误操作,数据被删除了,可以很方便地将数据恢复。

Read More

mongodb笔记(四) 查询

find

指定返回的键

可以在find中通过多个键值对进行查询会被解释成and,多个键值对之间是且的关系

通过find的第二个参数可以指定返回的键

1
2
db.users.find({},{"username":1,"email":1})
db.users.find({},{"username":1,"email":1,"_id":0})

第一条语句将返回_id,username,email,_id总是被返回。如果不想返回_id指定为0

Read More