重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
在数据库中存储树形结构的数据,这是一个非常普遍的需求,典型的比如论坛系统的版块关系。在传统的关系型数据库中,就已经产生了各种解决方案。 此文以存储树形结构数据为需求,分别描述了利用关系型数据库和文档型数据库作为存储的几种设计模式。 A.关系型数据库设计模式1idnameparent_id1ANULL2B13C14D2 上图表示了传统的设计方法之一,就是将树形结构的每一个结点作为关系型数据库中的一行进行存储,每一个结点保存一个其父结点的指针。 优点:结构简单易懂,插入修改操作都很简单 缺点:如果要获取某个结点的所有子结点,将是一件很恶心的事 B.关系型数据库设计模式2idnameparent_idleftright1ANULL182B1253C1674D234 上图在模式1的基础上多了两列,left和right,相当于btree中的左右分支,分别存储了左右分支结点的最大值和最小值。 优点:要查找一个结点的子结点很容易,只需要做一个范围查询就行了(比如B节点的子结点,只需要查询 id =2 id=5) 缺点:由于树结构存在在这里面了,所以添加或修改已存在结点将可能产生连锁反应,操作过于复杂 C.文档型数据库设计模式1 { "name": "A", "children": [ {"name": "B", "children": [{"name": "D"}]}, {"name": "C"}]} 将整个树结构存成一个文档,文档结构既树型结构,简明易懂。
成都创新互联专业成都网站设计、网站制作,集网站策划、网站设计、网站制作于一体,网站seo、网站优化、网站营销、软文平台等专业人才根据搜索规律编程设计,让网站在运行后,在搜索中有好的表现,专业设计制作为您带来效益的网站!让网站建设为您创造效益。
在 MySQL 表中存储树形结构数据:
一般比较普遍的就是四种方法:(具体见 SQL Anti-patterns这本书)
Adjacency List:每一条记录存parent_id
Path Enumerations:每一条记录存整个tree path经过的node枚举
Nested Sets:每一条记录存 nleft 和 nright
Closure Table:维护一个表,所有的tree path作为记录进行保存。
8.文件需要是二进制文件8.定义数据库表结构为struct,里面可以任意定义你要的帐号密码余额。多个的话,定义成链表link.8.写两个函数用来读和写这个文件,序列化操作文件。8.写文件时把struct的内容逐次写入...