动态可扩展的数据库设计

合集下载

如何设计动态(不定)字段的产品数据库表?

如何设计动态(不定)字段的产品数据库表?

如何设计动态(不定)字段的产品数据库表?项⽬组会议上讨论的关于不定字段数⽬的数据库表问题并没有结果,今天继续分析之后发现问题可能还更⼤。

当时讨论的结果是可能采⽤四种技术:动态增加数据库表字段预留⾜够的空⽩字段,运⾏时作动态影射⽤xml格式保存在单字段⾥改列为⾏,⽤另外⼀个表存放定制字段【⼀】现在我们来分析⼀下四种技术的优劣,不过⾸先可以排除的是第⼀点动态增加字段的⽅法,因为在实际操作时候⼏乎是不可能的(sqlserver 太慢,oracle索性不⽀持),基本可以不讨论就排除。

剩下后三点。

【⼆】先来讨论预留空⽩字段的⽅法,基本原理就是在数据库表设计的时候加⼊⼀些多余的字段,看下⾯的代码:CREATE TABLE Sample(name varchar(12),field0 varchar(1),field1 varchar(1),fieldN varchar(1)}然后看实际运⾏时候的需要,动态分配字段给系统使⽤,也许需要⼀个这样的结构来描述分配情况:public class Available{public int CurrentUnusedFieldNumber;public Hashtable FieldToRealName;}也许某⼀时刻的数据状况是这样的: CurrentUnusedFieldNumber=3, 哈西表FieldToRealName包含内容是("field0"="SomeId","field1"="AnyName", "field2=IsOk")现在的问题是如果要配合Hibernate,如何来处理?以上段的数据使⽤状况为例⼦,如果我们的类定义是这样:public class Entity01{public string Name;public string SomeId;public string AnyName;public bool IsOk;}也许只需要修改⼀下xxx.hbm.xml,把 SomeId 和 field0 做成对应就ok了。

用户动态数据库设计案例

用户动态数据库设计案例

用户动态数据库设计案例在设计用户动态数据库时,我们首先需要明确我们想要追踪和记录的用户动态数据。

以下是一个简单的用户动态数据库设计案例:数据库表设计1. 用户表 (Users)UserID (主键,自增)UsernamePassword (使用哈希存储)EmailRegistrationDate2. 动态表 (UserActivity)ActivityID (主键,自增)UserID (外键,关联Users表的UserID)ActivityType (例如:注册、登录、发表文章、点赞等)ActivityDateAdditionalData (例如:发表的文章内容、点赞的对象ID等)设计思路1. 用户表:存储用户的基本信息,如用户名、密码、邮箱和注册日期。

其中密码应使用哈希函数进行存储,以增加安全性。

2. 动态表:记录用户的所有动态活动,如注册、登录、发表文章、点赞等。

这个表通过UserID与用户表关联,可以追踪用户的所有活动。

每一条记录都包含活动类型、活动日期和其他相关的附加数据。

使用场景这种设计可以用于多种场景,例如:1. 用户行为分析:通过分析UserActivity表,可以了解用户的行为模式,如他们最常做什么,最喜欢在什么时候进行某些活动等。

2. 系统监控和安全审计:可以监控异常活动,如未授权的登录尝试、频繁的密码尝试等。

3. 内容推荐:基于用户的活动历史,可以为用户推荐他们可能感兴趣的内容或产品。

4. 用户反馈和调查:通过分析用户的活动历史,可以更好地理解他们的需求和反馈。

5. 营销策略:基于用户的活动历史,可以制定更有效的营销策略。

请注意,这只是一个简单的用户动态数据库设计案例。

在实际应用中,可能需要根据具体需求进行更复杂的设计和调整。

可动态扩展的数据库设计

可动态扩展的数据库设计

可动态扩展的数据库设计摘要:数据库设计的核心问题是建立模型。

对于信息系统中出现的数据结构改变和扩展的需求,采用了一种基于键值对的对象属性可扩展模型。

关键词:数据库设计;可扩展;对象;关系数据库0引言数据库设计是建立数据库及其应用系统的技术,是信息系统开发和建设的核心。

数据库设计是指对于给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效地存储数据,满足各种用户的应用要求(信息要求和处理要求)。

数据库设计的核心问题是建立模型。

一般而言这个模型要满足两类准则:结构准则和性能准则。

前者主要考虑如何保持数据的特性,后者主要考虑资源的合理使用和数据库的存储效率。

在所有数据库设计准则中最重要的原则是:最终产品必须满足用户的最终要求。

但是,首先需要存储的信息是动态的,应用自身的发展也会产生新的和扩展的信息需求;其次,信息化是分步进行的,用户很难一次提出完整的需求;第三,用户和设计人员之间存在理解上的差异。

因此,数据库应用系统在完成以后,系统功能很可能不能完全满足用户需求,而且随着时间的发展系统功能会逐渐偏离用户或企业的需求。

所以,数据库应用系统必须要不断地改进和扩展以适应环境的变化以及组织自身的发展需求。

目前数据库设计普遍采用“需求驱动”的数据库设计模式。

但是,如果在数据库设计阶段,建立数据库模型时没有充分考虑到数据库应用系统以后可能的改变及扩展,将使系统以后的维护工作变得极其困难,甚至必须重新开发数据库应用系统。

本文针对数据库应用系统开发过程中遇到的动态可扩展问题提出了一种数据库设计模型——基于键值对的对象属性可扩展模型,它区分了应用中的不同对象的类型,通过设计属性分类提高了数据库应用系统中数据的可改变性和可扩展性。

1信息系统中的传统数据库设计模型通常,在传统数据库设计模型中,设计人员在设计阶段总是将数据信息表达的尽可能丰富,使其不仅满足所有需求分析阶段得到的用户需求,而且还要尽可能考虑到应用以后可能的改变以及扩展。

软件系统的可扩展性设计与实现

软件系统的可扩展性设计与实现

软件系统的可扩展性设计与实现在当今数字化时代,软件系统在各个领域发挥着至关重要的作用。

随着业务的发展和用户需求的不断变化,软件系统需要具备良好的可扩展性,以适应新的功能需求和性能要求。

本文将探讨软件系统的可扩展性设计与实现,帮助您更好地理解如何构建灵活、可适应变化的软件系统。

一、可扩展性的重要性可扩展性是指软件系统能够轻松应对不断增长的业务需求和用户量,在不进行大规模重构的情况下,通过添加新的功能模块、扩展现有功能或提升系统性能来满足变化。

一个具有良好可扩展性的软件系统能够节省开发成本、缩短开发周期,并提高用户满意度。

想象一下,如果一个电商平台在面对突然增长的用户流量和新的业务需求时,无法快速扩展其服务器容量、添加新的支付方式或优化订单处理流程,将会导致用户体验下降、业务损失甚至可能失去市场竞争力。

相反,一个可扩展的软件系统能够迅速适应这些变化,保持稳定运行,并为企业的发展提供有力支持。

二、可扩展性设计的原则1、分层架构将软件系统划分为不同的层次,如表示层、业务逻辑层和数据访问层。

每层都有明确的职责,并且相互独立。

这样可以方便地对某一层进行修改和扩展,而不会影响其他层的功能。

2、模块化设计将系统功能分解为独立的模块,每个模块具有高内聚、低耦合的特点。

模块之间通过定义清晰的接口进行通信,使得新增模块或修改现有模块变得更加容易。

3、开放封闭原则软件实体(类、模块、函数等)应该对扩展开放,对修改封闭。

也就是说,在不修改原有代码的基础上,通过添加新的代码来实现新的功能。

4、依赖倒置原则高层模块不应该依赖于低层模块,两者都应该依赖于抽象。

抽象不应该依赖于细节,细节应该依赖于抽象。

这样可以提高系统的灵活性和可维护性。

5、设计模式的应用合理运用设计模式,如工厂模式、观察者模式、策略模式等,可以提高系统的可扩展性和可复用性。

三、可扩展性的实现技术1、数据库设计选择合适的数据库管理系统,并进行合理的数据库架构设计。

可动态扩展的数据库设计

可动态扩展的数据库设计
摘 要 : 数据库设计 的核 心问题是 建立模型 。对于信息 系统 中 出现的数据 结构改 变和 扩展 的需 求, 用了一种 基 于 采
键 值 对 的 对 象属 性 可 扩展 模 型 。
关键词 : 数据库设计 ; 可扩展 ; 象; 对 关系数据库 中图分类号 : 3111 TP 1 . 3 文献标识码 : A 文章 编 号 :6 27 0 ( 0 1 0 20 7 —2 1 7 —8 0 2 1 ) 1 —1 30
楼 不 同 , 要 按 照类 型 的不 同 , 计 多 个 不 同 的 数 据 表 分 需 设
离 用 户 或 企 业 的 需 求 。 所 以 , 据 库 应 用 系 统 必 须 要 数
不 断 地 改 进 和 扩 展 以 适 应 环 境 的 变 化 以 及 组 织 自 身 的
发展 需求 。
目前 数 据 库 设 计 普 遍 采 用 “ 求 驱 动 ” 数 据 库 设 计 需 的
模 式 。但 是 , 果 在 数 据 库 设 计 阶 段 , 立 数 据 库 模 型 时 如 建 没有 充 分 考 虑 到 数 据 库 应 用 系 统 以后 可 能 的改 变及 扩 展 , 将 使 系 统 以 后 的维 护 工 作 变 得 极 其 困难 , 至 必 须 重 新 开 甚 发 数 据 库 应 用 系 统 。本 文 针 对 数 据 库 应 用 系 统 开 发 过 程
主要 考 虑如 何 保 持 数 据 的特 性 , 者 主 要 考 虑 资 源 的 后
合 理 使 用 和 数 据 库 的 存 储 效 率 。 在 所 有 数 据 库 设 计 准
则 中 最 重 要 的 原 则 是 : 终 产 品 必 须 满 足 用 户 的 最 终 最
要 求 。但 是 , 先 需 要 存 储 的 信 息 是 动 态 的 , 用 自身 首 应 的 发 展 也 会 产 生 新 的 和 扩 展 的 信 息 需 求 ; 次 , 息 化 其 信 是 分 步进 行 的 , 户很 难 一 次 提 出 完 整 的需 求 ; 三 , 用 第 用 户 和 设 计 人 员 之 间 存 在 理 解 上 的 差 异 。 因 此 , 据 数

数据库管理系统的可扩展性与分布式架构

数据库管理系统的可扩展性与分布式架构

数据库管理系统的可扩展性与分布式架构数据库管理系统(DBMS)是指用于管理和组织数据的软件系统。

在现代企业和组织中,数据库管理系统起着至关重要的作用。

随着数据量的不断增长和应用场景的多样化,数据库管理系统的可扩展性和分布式架构变得越来越重要。

本文将探讨数据库管理系统的可扩展性和分布式架构。

一、可扩展性可扩展性是指数据库管理系统能够有效地应对数据增长和负载增加的能力。

当企业或组织的数据量不断增长时,传统的数据库管理系统可能会面临性能瓶颈和存储限制。

因此,可扩展性成为了一个关键的需求。

1. 垂直扩展垂直扩展是指通过增加硬件资源(如CPU、内存等)来提高数据库管理系统的性能。

这种扩展方式通常适用于小型数据库或数据量相对较小的情况。

然而,垂直扩展的局限在于硬件资源的有限性,无法满足大规模数据增长的需求。

2. 水平扩展水平扩展是指通过增加节点和服务器来增加数据库管理系统的容量和性能。

这种扩展方式适用于大型数据库和高负载的情况。

通过将数据分片存储在多个节点上,可以有效提高系统的处理能力和并发性能。

此外,水平扩展还可以提高系统的容错性,当某个节点或服务器出现故障时,可以通过其他节点继续提供服务。

3. 弹性扩展弹性扩展是指数据库管理系统能够根据需要自动调整资源的能力。

当负载较低时,可以减少节点和服务器的数量,以降低成本。

当负载增加时,可以动态地增加节点和服务器,以保证系统的性能和可用性。

弹性扩展在云计算环境中得到广泛应用,可以根据实际需求灵活地调整资源规模。

二、分布式架构分布式架构是指将数据库管理系统的数据存储和处理功能分布在多个节点和服务器上。

通过分布式架构,数据库管理系统可以实现数据的分布式存储、并行处理和高可用性。

1. 主从复制主从复制是一种常见的分布式架构方式,其中一个节点(主节点)负责处理事务和写入数据,其他节点(从节点)复制主节点的数据。

主从复制可以提高系统的读取性能,因为读操作可以在多个从节点上并行执行,从而提高吞吐量。

车位管理系统数据库的可扩展性设计及实施

车位管理系统数据库的可扩展性设计及实施一、引言车位管理系统是管理车辆停放位置的重要工具,尤其在城市交通拥堵日益加剧的背景下。

为了满足不断增长的用户需求和提高系统性能,设计一个具有可扩展性的数据库系统是至关重要的。

本文将探讨车位管理系统数据库的可扩展性设计及实施方案。

二、可扩展性设计方案1. 数据库结构的灵活性为了实现数据库的可扩展性,需要设计一个具有灵活的数据结构。

可以采用面向对象的数据库模型或者关系型数据库模型,并使用多态性和继承性等技术来描述车位管理系统的各种实体、关系和属性。

这样可以保证在未来的扩展中增加新的数据结构时不会影响现有的数据结构。

2. 数据分区与分布采用数据分区和分布的方式,可以将数据库分成多个独立的片段,每个片段存储一部分车位信息。

这样可以降低数据库查询和更新的负载,提高系统的并发性能。

同时,当需要扩展数据库时,可以添加新的分区,实现水平扩展。

3. 数据库索引的优化合理设计数据库索引是提高系统性能的关键。

需要根据实际查询需求和数据特点来选择创建索引的字段,避免创建过多的索引导致数据库性能下降。

此外,可以定期进行索引的优化和重建,以保持数据库的高性能。

4. 数据分库分表当车位管理系统的数据量达到一定规模时,可以考虑将数据库进行分库分表的设计。

通过按照地区或其他条件将数据分散存储在不同的数据库或表中,有效提高系统的扩展能力和性能。

5. 数据备份与恢复为保证系统的可扩展性,在数据库设计中应考虑数据备份与恢复。

通过定期进行数据库的备份,并设计合适的备份策略,可以防止数据丢失和灾难恢复。

同时,备份的数据也可以用于扩展数据分析和增加新功能。

三、实施方案1. 实施数据库设计根据可扩展性设计方案,进行数据库的实施。

可以选择合适的数据库管理系统(如MySQL、Oracle等),创建数据库和表,并设计好数据结构、索引等。

需要注意的是,数据库的设计应符合统一的标准和规范,以便后续维护和扩展。

2. 数据库性能调优在数据库实施过程中,需要进行性能调优,以保证系统的高效运行。

dynamic多数据源配置案例

动态多数据源配置是指在一个系统中同时使用多个数据源进行数据操作,这种配置方式能够更好地满足系统对不同数据源的需求,提升系统的性能和扩展性。

在实际开发中,动态多数据源配置是一项复杂而重要的工作,需要开发人员熟知各种数据源类型和配置方法,并且合理地应用到系统中。

下面将通过一个实际案例来介绍动态多数据源配置的实现方法。

案例背景我们正在开发一个企业级的项目管理系统,该系统需要与多个外部数据库进行数据交互,包括企业内部的数据仓库、第三方服务商的数据接口以及云服务商提供的数据存储等。

为了提高系统的性能和灵活性,我们决定采用动态多数据源配置的方式来实现系统对这些不同数据源的有效管理和利用。

1. 数据源定义我们需要在系统中定义各种数据源,包括数据库、数据接口和云存储等。

对于数据库数据源,我们需要定义其连接信息,包括驱动、URL、用户名和密码等;对于数据接口和云存储数据源,我们需要定义其访问接口和认证信息等。

这些数据源定义将作为系统的基础配置信息,供后续的动态数据源管理和调用使用。

2. 数据源管理在系统中,我们需要设计一个独立的数据源管理模块,用于对各种数据源的管理和调用。

该模块包括数据源的添加、删除、修改和查询等功能,同时还需要提供数据源的连接和关闭等操作。

在实际应用中,我们可以通过配置文件、数据库或者远程服务等方式来进行数据源的管理,确保系统对多个数据源的动态管理和调用。

3. 数据源路由为了实现系统对多个数据源的动态调用,我们需要设计一个数据源路由模块,用于根据业务需求来选择不同的数据源进行数据操作。

该模块可以通过拦截器、代理或者AOP等方式来实现,在数据操作之前根据业务需求来动态选择合适的数据源进行操作,从而实现对多个数据源的有效调度和利用。

4. 动态切换在实际业务中,我们可能需要在不同的场景下动态切换数据源,例如根据用户的地理位置、企业的业务类型或者时间段的不同来选择不同的数据源进行数据操作。

在系统设计中,我们需要考虑如何实现动态切换数据源的功能,以满足不同场景下的数据操作需求。

如何在MySQL中实现数据库的动态扩容和收缩

如何在MySQL中实现数据库的动态扩容和收缩MySQL是一种开源的关系型数据库管理系统,被广泛应用于各种规模的企业和互联网应用中。

当应用规模不断扩大时,数据库的容量需求也会不断增长。

因此,了解如何在MySQL中实现数据库的动态扩容和收缩对于保障系统的可用性和性能至关重要。

数据库的动态扩容是指在不中断数据库服务的情况下,通过一系列措施来增加数据库的存储能力。

而数据库的动态收缩则是指在不中断数据库服务的前提下,通过一系列措施来减少数据库所占用的存储空间。

下面将从两个方面来介绍如何在MySQL中实现数据库的动态扩容和收缩。

一、动态扩容1. 分区表分区表是MySQL提供的一种将表数据按照指定的规则划分到多个分区(即表的分片)中的方式。

通过使用分区表,可以将数据分散存储在多个磁盘上,从而提高数据库的读写性能。

当需要扩容时,只需在新的磁盘上创建新的分区,并将数据迁移至新的分区中即可,而不需要中断数据库的服务。

这种方式适用于那些根据某个范围条件进行查询的表。

2. 数据库集群数据库集群是一种将多个数据库服务器组成一个逻辑数据库并提供高可用性和可扩展性的解决方案。

当需要扩容时,只需将新的数据库服务器加入到集群中即可实现对数据库容量的扩展。

数据库集群通常使用主从复制或者多主复制的方式实现数据的同步与复制,以保证数据的一致性和可用性。

3. 数据库分片数据库分片是一种将一个数据库分成多个较小的数据库,并将数据根据某种规则(如ID为奇数的数据存储在一个数据库中,ID为偶数的数据存储在另一个数据库中)分散存储在不同的数据库中的方式。

数据库分片可以提高系统的并发处理能力和负载均衡能力。

当需要扩容时,只需在新的数据库中创建新的分片,并将部分数据迁移到新的分片中即可,而不需要中断数据库的服务。

二、动态收缩1. 清理无效数据数据库中会存在一些无效数据,如已删除的数据、过期的数据等。

定期清理这些无效数据可以减少数据库所占用的存储空间。

可扩展性数据库的设计与实现

可扩展性数据库的设计与实现第一章概述随着互联网技术的快速发展,现代应用程序越来越需要处理海量的数据。

传统的关系型数据库在这种情况下已经显得力不从心,因为它们的架构设计无法满足大规模数据存储和处理的需求。

因此,可扩展性数据库的设计与实现成为了当前研究的热点。

可扩展性数据库是指可以随着数据量和访问负载的增加而动态扩展的数据库。

在设计和实现可扩展性数据库时,需要考虑具有良好的分区能力,高可用性,高性能和易扩展性等特性。

本文首先介绍了几种可扩展性数据库的设计策略和实现方法,然后针对每种方法进行了深入分析并提出了相关的优化措施。

最后,本文简要讨论了可扩展性数据库的未来发展方向。

第二章数据分区可扩展性数据库的分区是实现可扩展性的关键因素。

数据分区意味着数据库将不同的数据集进行分隔和存储在分布式节点上,以便可线性扩展以及实现高可用性。

常见的数据分区方法有水平分区和垂直分区。

水平分区将数据集水平拆分成数据块,并将它们分布在不同的节点上。

这种方法可以提高可扩展性,因为每个节点负责处理自己的数据块,因此在增加更多节点时可以无限扩展。

垂直分区则是将不同的数据列垂直拆分成部分并分布在不同节点上。

这种方法可以更好地控制数据的存储和访问。

例如,一些数据可能更容易缓存但很少使用,而其他数据可能经常使用但不如其他数据重要。

通过将数据分到不同的节点中,可以更好地控制这些数据的存储和访问权限。

第三章数据副本和冗余数据副本或备份是可扩展性数据库的又一个核心特性。

在这种数据库系统中,常常需要将数据备份到多台服务器上以防止任何一台服务器崩溃。

这些备份保证了高可用性,即使一台服务器故障,其他服务器也可以继续提供服务。

另外,可扩展性数据库还需要考虑数据冗余,这可以提供更好的保护,以减少数据丢失的可能性。

通过将数据复制到多个节点中,可以在一些节点失败时保护数据。

然而,数据副本和冗余也会带来一些问题。

首先,维护多个节点中数据的一致性是关键的。

但是,如果多个数据备份发生冲突,那么这些备份之间的差异可能会损害数据库可用性。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

可动态扩展的数据库设计
摘要:数据库设计的核心问题是建立模型。

对于信息系统中出现的数据结构改变和扩展的需求,采用了一种基于键值对的对象属性可扩展模型。

关键词:数据库设计;可扩展;对象;关系数据库
引言
数据库设计是建立数据库及其应用系统的技术,是信息系统开发和建设的核心。

数据库设计是指对于给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效地存储数据,满足各种用户的应用要求(信息要求和处理要求)。

数据库设计的核心问题是建立模型。

一般而言这个模型要满足两类准则:结构准则和性能准则。

前者主要考虑如何保持数据的特性,后者主要考虑资源的合理使用和数据库的存储效率。

在所有数据库设计准则中最重要的原则是:最终产品必须满足用户的最终要求。

但是,首先需要存储的信息是动态的,应用自身的发展也会产生新的和扩展的信息需求;其次,信息化是分步进行的,用户很难一次提出完整的需求;第三,用户和设计人员之间存在理解上的差异。

因此,数据库应用系统在完成以后,系统功能很可能不能完全满足用户需求,而且随着时间的发展系统功能会逐渐偏离用户或企业的需求。

所以,数据库应用系统必须要不断地改进和扩展以适应环境的变化以及组织自身的发展需求.
目前数据库设计普遍采用“需求驱动”的数据库设计模式。

但是,如果在数据库设计阶段,建立数据库模型时没有充分考虑到数据库应用系统以后可能的改变及扩展,将使系统以后的维护工作变得极其困难,甚至必须重新开发数据库应用系统。

本文针对数据库应用系统开发过程中遇到的动态可扩展问题提出了一种数据库设计模型——基于键值对的对象属性可扩展模型,它区分了应用中的不同对象的类型,通过设计属性分类提高了数据库应用系统中数据的可改变性和可扩展性。

1 信息系统中的传统数据库设计模型
通常,在传统数据库设计模型中,设计人员在设计阶段总是将数据信息表达的尽可能丰富,使其不仅满足所有需求分析阶段得到的用户需求,而且还要尽可能考虑到应用以后可能的改变以及扩展。

采用这种方式设计的数据库应用不仅数据表过于“臃肿”,而且对于未来的应用难于改变或者扩展。

例如,在某校园建筑管理信息系统中,系统成立初期,只要求该系统能够展示建筑的基本信息,如名称、简述等。

设计人员有可能将数据表格设计成,我们称之为方案1。

包括编号、建筑名称、建筑描述是建筑的最基本属性,此外设计人员也考虑到了系统将来的扩展,加入了诸如建设日期,高度,等属性。

由于设计人员不可能完全预见学校未来发展状况,所以对于系统现阶段的需求来说,尽管建筑信息表已经非常详尽了,但是随着时间的推移系统仍有可能不适应实际需求。

随着需求的发展,建筑的信息需求有可能发生变化。

例如:①为了获取建筑质量,有可能对该建筑的施工文件等信息保存;②随着校园信息系统的建立,可能有更多的不同类型的建筑需要存入系统,比如管道信息,一些标志性雕塑,或者植被信息;③随着系统的扩展,原有数据表可能不能满足日益增多的该类建筑所有信息的存储,所以需要建立新的数据表扩展其属性;④对于一些简单
的建筑或者物体比如一棵树一个石凳,存储的信息明显和一座教学楼不同,需要按照类型的不同,设计多个不同的数据表分别存储不同类型的物体信息。

2 数据库设计中的扩展性需求
在应用中,类似这样的数据存储结构改变以及应用扩展的情况还有很多。

如果用传统数据库设计模型,那么在设计初始阶段就必须考虑到应用未来所有的改变及扩展,尽可能使表格的信息详尽,否则当应用发生改变或扩展时,必须重新设计表结构,并对应用程序中相关片段全部重写。

如果同一变化出现在不同部位,由于不同的原因,出现在不同的阶段,那么现有表结构不能满足要求;如果需要增加过多的对象属性信息,那么表结构将必须修改。

但是,如果我们将数据对象化,并采用定义其属性和值的设计模型,上述问题将迎刃而解。

作为开发人员,总会面对业务方提出的数据结构变化的需求,字段的增加,数据表的修改总是随时可能根据需求发生。

因为业务在发展,或者需求就有可能需要一个完全动态的可扩展的数据库设计方案,但是以目前的关系数据库实现这种动态扩展的特性,在系统一定规模之后所付出的代价是昂贵的,也是不安全的。

为了这种动态扩展性,有这样三种常用的方法:
第一种方法:预留字段。

既然很难加字段,就预先留好一些备用,但是这样没那么灵活,有一定的实用性,不过因为预先留的字段一般是没什么含义的,需要有额外的信息来描述,这种方法在扩展性要求不是太强的地方可以不影响性能的前提下提供一定的扩展性。

第二种方法:使用复杂字段。

在某些特殊要求下还是很有用的,比如,某个业务实体(某张表),有一些标记位,都是true/false 的标记,可以理解为这个实体的一些属性,经常需要添加,这种情况,在生产中我们使用过用一个数字,按位来表示这些标记的,比如第三位表示他是不是付费用户,第四位表示他是合作方来的用户还是自己注册的,等等。

还有一种情况,需要更复杂的属性列表,属性个数经常变,可以考虑使用一个文本字段,保存结构化的数据,然后在使用时需要动态解析该字段。

使用复杂字段的好处就在于比较灵活,同一类型的数据可以放在一起(实际上相当于把应该是一个关联表的数据放一个字段里了),操作的性能也不错,但是复杂字段里面的内容查询比较困难,程序实现和修改起来也更复杂。

第三种方法:将数据的存储和索引(需要查询的内容)分开存放,相当于主表就一个key value,把需要查询的字段放到其他单独的表里去,这种方法对数据的实时查询的效率有一定的影响,但是针对实时性的要求并不是所有系统都有要求的,在有些地方是很好的解决方案。

3 基于键值对的对象属性可扩展模型
本文的基于键值对的对象属性可扩展模型就是结合上面提到的第三种方法,使用数据表分别单独存储对象分类和分类的属性信息的定义,并且实现了分类属性之间的树形的可扩展结构,对象信息的存储用过一张表用来存储所有对象公有的可快速查询的数据信息,另一张属性值表存储所有的对象的特有属性的key value。

通过这样的设计可以在不修改原数据表结构的前提下,实现所有存储对象的动态可扩展,如图1 所示。

图1 对象属性信息结构模型
由图 1 所示,表t_class 保存对象的分类信息如建筑,管道,雕塑等;
t_attibute_def 保存的是每个分类所对应对象的属性信息如建筑的高度,施工单位等;t_entity 保存的是分类对象的公共信息,是具体的物体如 1 号教学楼;t_entity_content 保存每个具体的对象所有属性的信息值;t?倕_file 表
用来保存一些扩展的文件信息。

通过这样一个模型我们可以在需要是动态定义一个大的分类并且可以动态的设置每个已有分类拥有哪些属性,所有对象的的具体内容分别存储在对象公共信息表,对象属性信息表和文件信息表中。

在实际应用中,还涉及到属性冗余,查询,修改等方面的问题,通过在校园管理系统中应用的结果来看,这些都可以实现,并能获得较好的效率。

4 结束语
综上所述,传统的数据库设计适用于简单的、业务数据固定或变化极少的集中式数据库应用。

在应用范围更广需要更灵活数据结构的系统中,显然面向对象属性的扩展设计更加适宜。

随着网络环境的日益普及,新的应用呈现出来的开放性与分布性特点,web 应用系统也由简单的数据库系统逐具有了更灵活多变应用环境,在这种环境下,能够满足扩展和动态改变的需求,将有更广阔的应用前景。

相关文档
最新文档