`
庄表伟
  • 浏览: 1150561 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

奇蠢无比的数据库设计一例

阅读更多
怪僻游戏现在是玩得如火如荼,于是有很多人出来,打算统计这个病毒传播的途径,本来这也算是一桩雅事。只是病毒传播的速度远远超出人们的预料,不用工具是不行了。
 
最初的设想,是画个漂漂亮亮的图,比如用MindMap Manager之类的工具搞一个:引爆“怪癖”病毒之看图说话。这么搞也是人力有时而穷啊,结果我今天就看到了一个“高手”,打算用数据库来统计这个传播的信息。玩得都那么有技术含量:用数据库保存"怪癖图"。在经过仔细研究之后,我发现,这是一个奇蠢无比的数据库。而且,这个设计还不是mornlee本人的设计,竟然大有来头:Managing Hierarchical Data in MySQL
 
为什么要说这个设计愚蠢呢?让我们从头说起吧。
 
首先明确我们讨论的范畴:如何通过关系型数据库的二维表,保存树状图信息?当然,我们不能仅仅考虑将数据保存起来,还要考虑添加、修改、删除、查询、统计等等工作的方便性与执行效率。而这嵌套集合模型(Nested Set Model)简直可以算是一无是处。
 
这Mike Hillyer之所以反对之前的邻接列表模型(Adjacency List Model),还是有道理的。因为假设在一个节点信息中,仅仅记录了其父节点的ID号,那么当我们试图查询一个节点的多级子节点集合,或者第N层父节点时,就会非常吃力。面对这样的吃力,一般来说,我们都会对这个模型进行改进,添加一些信息。在我曾经做过的数据库设计中,我至少会添加这样两个字段:
PathInfo   varchar(2000)
LastId       int
在PathInfo中,我会存放一个路径信息,比如第一级节点,PathInfo即为N,N可以为1~x,第二级节点,PathInfo即为N,M,同上,第三级节点:N,M,L同上。假设有一个节点1,2,1,我们想在这个节点下加一个子节点,那么这个新节点的PathInfo,就应该是1,2,1,1,然后,我们还要将父节点的LastId,从0改变为1,下一次我们想要再增加一个节点的时候,就会计算出PathInfo为1,2,1,2。依此类推。
 
在我们添加了这两个字段之后,可以很方便的进行各种查询,添加,删除,修改,统计等等操作。再回过头来看这所谓的嵌套集合模型,真是令人吃惊,每次添加一个新的节点,都要同时修改N多个节点的数据,如果运气不好,甚至可能需要修改几乎所有的记录,删除也是一样,而当需要进行各种查询统计操作的时候,依然令人感觉到复杂与效率底下。如果每一个操作,都需要锁定整张表的时候,这样的数据库设计,就是彻底失败的!
 
大家自己比较比较吧。
分享到:
评论

相关推荐

    支付交易平台数据库设计文档

    数据库设计是信息技术领域中极为重要的一环,尤其是在金融行业,其准确性、完整性和安全性的要求尤为严格。本设计文档的描述指出,用户登录信息表、用户账户信息表、退款和交易流水表等是设计的重点内容。标签“银行...

    奇安信数据库审计V6.0_用户手册v1.0.docx

    奇安信数据库审计系统V6.0是一款专业级别的数据库安全管理和审计工具,旨在提供全方位的安全保障和精细化的数据库访问控制。该系统不仅能够对数据库活动进行实时监控,还能够对潜在的安全威胁进行识别和防御。 ####...

    教务管理系统 数据库设计

    本篇文章将详细介绍一个典型的高校教务管理系统的数据库设计方案,包括需求分析、事务需求分析、概念设计、逻辑设计及物理设计等核心环节。 #### 二、需求分析 需求分析是设计任何信息系统的基础,对于教务管理...

    数据库设计教程(第二版)pdf

    根据提供的信息,我们可以推断出这是一本关于数据库设计的教程书籍,并且是其第二版。由于具体的页面内容并未给出,我们将基于标题、描述及标签中的信息,对可能涉及的关键知识点进行归纳总结。 ### 数据库设计的...

    简单数据库设计实例

    数据库设计是一个复杂的过程,涉及到对业务需求的分析、实体识别、关系模型的建立、物理设计等步骤。在本文中,我们将讲解一个简单的数据库设计实例,涉及到教学管理系统的设计。 一、需求分析 在设计数据库之前,...

    需求分析+概要设计+详细设计+数据库设计模板

    软件测试是软件开发的最后一步骤,是指根据软件数据库设计报告,测试软件的功能和性能要求。软件测试的目的是确定软件是否满足用户的需求。软件测试的输出是软件测试报告文档模板。 需求分析、概要设计、详细设计和...

    UML数据库设计应用.rar

    《UML数据库设计应用》是一本深入探讨UML(统一建模语言)在数据库设计中的应用的专业教材。书中详尽地介绍了UML的基础概念、核心元素以及如何利用这些元素进行有效的数据库设计。对于初学者来说,它提供了一个系统...

    图书馆管理系统数据库设计

    图书馆管理系统数据库设计是一个重要的课程设计任务,旨在让学生掌握计算机管理信息系统设计的基本方法,特别是关系型数据库管理系统的设计与应用。在这一任务中,学生需要完成一个能够处理图书馆日常业务的系统,...

    数据库设计开发规范-阿里.pdf

    《数据库设计开发规范-阿里.pdf》是一份由阿里巴巴云数据库服务部门编制的技术文档,旨在为数据库设计和开发提供一套全面且规范化的指导原则。该文档涵盖了Oracle和MySQL两大主流数据库系统的具体规范,并针对每种...

    OA 协同办公系统 数据库设计说明书(附数据库关系表)

    表之间的关联设计是指对数据库中每个表之间的关联关系的设计,包括一对一、一对多、多对多等关联关系。表之间的关联设计需要考虑到多方面的因素,包括系统的功能需求、数据的存储和管理、数据的安全性等。 3.4 存储...

    英语学习助手数据库课程设计

    【数据库课程设计——英语学习助手】是一个综合性的学习平台,旨在提供全面的英语学习支持,包含用户管理、学习工具和数据库管理等多个方面。这个系统具备三种操作模式:游客模式、普通用户模式和管理员模式,以满足...

    以图书馆管理系统为例,讲解数据库课程设计

    数据库课程设计:以图书馆管理系统为例,讲解数据库课程设计; 数据库课程设计:以图书馆管理系统为例,讲解数据库课程设计; 数据库课程设计:以图书馆管理系统为例,讲解数据库课程设计; 数据库课程设计:以图书...

    自己动手设计数据库.[美]Michael J.Hernandez(带详细书签) PDF 下载 高清 完整版

    第一,作者采用简单易懂的语言,尽量清晰、全面地描述关系数据库设计的整个过程,没有过多专业的术语和复杂的数据库设计方法学,因此《自己动手设计数据库》既适合专业人士参考之用,也适合给初学者、数据库设计爱好...

    学生成绩管理系统-数据库设计

    1.数据库设计的重要性:数据库设计是系统的核心组件之一,它可以直接影响系统的性能和可靠性。 2.E-R 图的应用:E-R 图可以帮助我们更好地理解系统的数据结构和数据之间的关系。 3.数据字典的作用:数据字典...

    8个数据库设计典型实例

    ### 数据库设计典型实例概述 本文将针对八个典型的数据库设计实例进行深入解析,涉及人力资源管理、销售、仓储等多个领域。每个实例都将从实际应用场景出发,详细介绍其设计思路、功能需求和技术实现。 ### 实例1...

    SQL Server 2008数据库设计与实现

    《SQL Server 2008数据库设计与实现》是关系型数据库设计与开发方面的一本经典著作,由资深数据库专家撰写,旨在向读者介绍世界上最受欢迎的数据库管理系统之一——SQL Server 2008。全书分为三个部分,从基础概念到...

    Oracle数据库编程经典300例

    Oracle数据库编程经典300例,这是完整版的pdf.可以参考

    数据库的设计文档(设计说明书)

    数据库的设计文档,通常被称为设计说明书,是数据库开发过程中的关键组成部分。它详尽地记录了数据库的架构、逻辑关系以及物理实现方式,为...因此,编写详尽、清晰的数据库设计文档是确保项目成功的关键步骤之一。

    数据库课程设计银行管理系统(含详细报告)

    数据库课程设计是IT教育中的一个重要环节,它让学生深入理解数据库管理系统的原理,并通过实践来提升设计和实现数据库应用的能力。银行管理系统是一个典型的案例,因为银行数据处理涉及到大量的事务操作,安全性要求...

Global site tag (gtag.js) - Google Analytics