我们首先来通过一道题来探索数据库的设计,还是针对软件生命周期管理这个系统,我有这样一个需求,无论我系统怎么变化(增加减少模块),整体的表结构都不变,同时也不需要增加减少表,这里面我们还要考虑一点,就是在不同的公司,对字段的要求可能也不一样,再一些大公司针对缺陷管理可能需要50个字段甚至更多,不过对于小公司可能只需要20个字段就可以满足需求,综合上述的说明,表结构不能变,表不增也不减,所以难度之大可想而知,首先要应对增加和减少模块不会影响到表,我首先是这样设计的,把所有模块的名称放在一张表里,这样增加或减少模块只需要增加一条记录就可以了(这个之前讲过的和xml配置是一个道理的),然后把属性也单拿出来作为一张表,当我们需要添加属性的时候,只要在该属性表里面添加或减少字段就可以了,这也是我们通常所说的行列转置,然后通过中间表将属性表与模块表关联起来,另外还有一张就是存储数据的表了,这张表虽然不复杂,由于不同属性可能类型不太一样,所以要花费一些功夫把字段进行一定的转型操作,统一存储。
也有的人会这样想,我可以用一张很大字段的表,然后可以预留好多好多的字段,牺牲空间,来换取时间的方法,其实也是可行的,有的时候我们还得非这么做不可。
我下面举一个真实的例子,IBM的生命周期管理系统(具体叫什么名字我也没记住,大家有兴趣可以查一下),首先通过内部手段,把数据库结构弄到手,然后导入到EA中,映射出类图,以及之间的关系结构,首先映入我们眼帘的就是三张字段特别多的表,一个叫Are表,一个叫Were表,还有一个叫Latest表,那么这三张表都是分别用来做什么的呢,这个系统据说已经运行了十年之久,数据库从来都没有出现过问题,这是为什么呢,下面我们就依赖一起探索着几张大表的奥秘。首先Latest表是用来存放最新任务的,Are表是指今天未完成的任务表,而Were表指的是已经完成的任务。为什么要这样设计呢,设计人员发现一个规律两万名员工平均每人每天分得五个新任务,而每天未完成的任务数也是每人5个左右,所以这样设计有一个好处,就是保证了最新任务表与未完成记录表的记录数量维持在一定的水平不变,这也是其中的奥秘所在,但是有人会说了,已经完成的任务表岂不是越来越多,越来越大,确实是这样,不过我们有没有发现,已经完成的任务可能都是一些不变的数据,其用途主要是领导用来做分析报表使用的,首先我们可以这样做,把一些用于分析报表使用到的数据提取出来,也可以将这些不变的数据通过hadoop云技术进行分布式云存储。
下面再给大家介绍一种比较巧妙的方法,就是大字段法,首先我们要把一个对象变成一种可以被数据库存储的大字段的形式(把对象序列化成2进制,16进制,或者是json格式,也可以是自定义格式)来进行存储,不过这样存储有一个弊端,就是我在进行数据分析的时候,由于不需要吧所有字段信息都要了解,所以不是特别好解析,还有就是编程的一些困难,这时有的同学又给出了解决方案——可以把这些用到的字段单列出来,的确这也是一种很好的解决方案。
还有一款软件就是IBM的CQ,这里面用到了一个数据字典的概念,首先创建一张主表,然后系统会根据数据字典来动态生成字表。原理是这样的,不过具体是怎么操作还得等以后细细研究
最近有一种数据库挺流行的,文档型数据库,也同时产生了一种概念叫NOSQL,例如Mongodb,是以一种OO的思想来存储数据,还有云技术存储DFS(Distributed file system),这种存储有一个弊端就是不能够频繁的修改,这样会造成数据的冗余。
其实数据库的设计还有好多方法,比如外置小文件的方法,通过数据库中的URL来指向文件路径,听说我国的民航系统就是这种形式,有上千万个这样的小文件;还有多表型,就是将不同类型的数据放在不同的表中,这种方式也解决了我前边所说的类型转换的问题。总之这些只是一些理论方面的东西,还是要在实践中去鉴定方案的可行性。
相关推荐
《分布式数据库架构及企业实践——基于Mycat中间件》对 Mycat 从入门到进阶、从高级技术实践到架构剖析、从网络通信协议解析到系统工作原理的方方面面进行了详细讲解,并剖析了 Mycat的 SQL 路由、跨库联合查询、...
中小企业仓库管理系统——数据库设计与编码毕业设计 本毕业设计的主要目标是设计和实现一个中小型企业仓库管理系统,从而提高仓库管理的效率和准确性。该系统基于多层架构,采用C/S模式,旨在满足中小型企业的仓库...
数据库概念结构设计是数据库设计的第二步,需要设计数据库的概念结构,包括实体、属性和关系。在人事管理系统中,需要设计员工、部门、职位、薪资等实体,并确定它们之间的关系。 数据库逻辑结构设计 数据库逻辑...
需求分析是设计的第一步,需深入理解钻井业务流程,将其分为设计前期、设计、钻井和完井四个阶段,然后通过数据流图和数据字典详细描述每个阶段的数据处理过程。 概念结构设计阶段则将需求分析的结果抽象为独立于...
逻辑结构设计是数据库设计的第二步骤,在这个阶段,需要确定数据库的逻辑结构,确定数据库的表结构和字段设计。 数据库实施是数据库设计的第三步骤,在这个阶段,需要根据数据库的逻辑结构,实现数据库的物理设计,...
通过"第三部分:数据库分析和设计(第二期).pdf"这个文件,学习者可以深入探讨数据库分析和设计的高级主题,例如ER图的绘制,数据库设计的最佳实践,以及如何处理复杂的数据关联和事务处理。无论你是数据库新手还是...
- **范式理论**:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)等,指导数据库表结构设计。 - **索引优化**:创建合适的数据索引,提高查询速度。 6. **Web数据库安全**: - **权限管理**:设置不同级别的...
开发所用技术与环境: 架构:native 语言:C++ 数据库:sqlite 3.31.1 使用的库:EasyX_20200520(beta) 开发系统:Windows 10.0 Build 18362 开发工具:Visual Studio 2017 Community 支持的系统:Windows 7/...
软件架构设计完整——从案例看两类软件架构概念 软件架构设计是软件开发中最为关键的步骤之一,它直接关系到软件的质量、可维护性和可扩展性。软件架构设计是一种复杂的系统设计问题,需要考虑到软件的各个方面,...
### 从零到十亿——大型网站架构设计变迁 #### 架构的定义与意义 在探讨大型网站架构设计变迁之前,我们首先需要明确“架构”这一概念的本质。架构可以被理解为对一个系统内各个组成部分及其相互关系的一种主观...
通过本书不仅可以了解 Mycat 的基本概念,掌握 Mycat 配置等技术,还能感受到 Mycat 的架构设计之美,了解 Mycat 2.0的未来规划。 第 1 章数据库中间件与分布式数据库的实现 第 2 章 Mycat 入门 第 3 章 Mycat 进阶 ...
《SQL Server 2008数据库设计与实现》深入浅出地介绍了目前世界上最受欢迎的数据库管理系统之一——SQL Server。全书共分三个部分:第一部分阐释了数据库的基本概念,讲解了数据库建模语言;第二部分展示了从概念...
Spring技术内幕:深入解析Spring架构与设计原理 Spring技术内幕 Spring是一个基于Java的开源框架,旨在简化Java企业应用的开发。Spring的目标是提供一个简洁、灵活、可扩展的框架,以帮助开发者快速构建企业级...
数据库课程设计——人事管理系统 在IT领域,数据库课程设计是一项重要的实践任务,旨在让学生深入了解数据库原理并掌握实际操作技能。本项目是一个名为“人事管理系统”的案例,它涉及到多个相关知识点,包括数据库...
跨数据中心数据库双活架构设设计原则及技术选型 跨数据中心数据库双活架构设设计原则及技术选型是指在多数据中心部署的目标是不同的,可以是分布式业务,也可以是读写分离,也有完全对等双活的业务部署。在这些部署...
《ASP.NET 2.0项目开发第一步——UML+C#与VB双语+Crystal Reports》是一本面向初学者和进阶者的技术书籍,旨在通过实际项目案例,介绍如何使用ASP.NET 2.0进行Web应用开发。这本书的核心知识点涵盖了UML(统一建模...
这套教材结合了清华大学出版社出版的《系统架构设计师教程(清华版)第二版》和配套的全程指导材料,为备考者提供了全面、深入的学习资源。 系统架构设计师是一项专业技能,涉及到计算机系统的设计、规划、优化以及...
- 设计数据库的关系模式,确保关系模式至少符合第三范式(3NF)。 - 明确各关系属性的范围(域)。 - 确定各关系的主键、约束条件以及关系间的参照完整性规则。 5. **设计用户子模式**:根据不同的用户需求,设计...
本文将深入探讨关系数据库设计中的关键概念,包括第一范式(1NF)、第二范式(2NF)、第三范式(3NF)以及BCNF(Boyce-Codd范式),并分析其在实际应用中的作用。 #### 第一范式(1NF) 在关系数据库中,每一行...
这包括关系型数据库模型、SQL语言(用于数据查询、更新和管理)以及数据库设计的范式理论,如第一范式(1NF)、第二范式(2NF)和第三范式(3NF),以确保数据的规范化和减少冗余。 2. **MySQL数据库**:MySQL是一...