创新数据库设计技巧,提高数据操作效率 (数据库设计新的)

随着互联网的飞速发展,数据库已成为企业信息化建设中不可缺少的一部分。设计好的数据库可以帮助企业高效地存储和管理数据,并提高数据的利用率。在实际应用中,数据库设计技巧的好坏往往直接影响数据操作的效率。本文将从以下角度探讨的方法和实践。

一、数据库设计原则

数据库设计是一个非常关键的环节,其设计好坏决定了数据库的性能与稳定性。为了提高数据操作效率,设计数据库时需要遵守以下原则:

1.合理分析需求。在数据库设计前,需要对企业的业务需求进行梳理和分析,明确数据表之间的关系以及数据的存储方式,从而选择合适的数据库模型和数据结构。

2.保证数据完整性。作为数据库的核心特性,数据完整性是确保数据的正确性和有效性,避免数据库出现脏数据和重复数据的重要保障。在设计数据库时需要合理设置数据类型、约束和规则,以保证数据的完整性和一致性。

3.优化查询性能。数据库查询是最为频繁的操作,因此需要通过索引和分区等手段来优化查询性能。同时,也需要在设计时考虑后期数据增长的情况,避免出现单表数据过大而影响查询效率的情况。

4.创新数据库设计。合理借鉴优秀的数据库设计方案,结合企业实际情况,采用新型数据结构、算法和设计思路等方式,创新数据库设计,提高数据库的性能和可扩展性。

二、创新数据库设计技巧

1.采用适当的存储引擎

在设计数据库时,存储引擎的选择是非常关键的一步。目前主流的数据库引擎包括InnoDB、MyISAM等,需要根据业务需求的不同来选择适合自己的存储引擎。比如,InnoDB适合高并发和事务处理,而MyISAM适合读频繁的应用。在数据操作时,适当调整存储引擎的参数和优化数据库结构,也可以显著提高数据库的性能。

2.采用分区表

对于单表数据过大的情况,可以采用分区表的方式来提高查询效率。分区表是将一个大表划分成小表,每个小表拥有独立的存储空间和索引。这样可以有效地分散查询请求,提升查询效率。同时,也可以根据数据访问模式来选择分区方式,比如按时间、按地域等方式进行分区。

3.采用非关系型数据库

传统的关系型数据库存在许多缺点,比如数据结构散乱、灵活性不足、缺乏高并发和大数据处理等问题。而采用非关系型数据库(NoSQL)则可以有效地解决这些问题。非关系型数据库采用了键值对、文档、图形等方式来存储数据,具有高扩展性、高可用性和高并发性等优点,适合处理大数据和高并发的应用场景。

4.采用云数据库

随着云计算的发展,云数据库也越来越受到企业的青睐。云数据库具有高可用性、弹性伸缩性和全球性等优点,可以为企业提供强大的数据存储和处理能力。同时,也可以借助云数据库提供的工具和服务来快速搭建和实现数据库的监控、备份、恢复等操作。

三、实践方法

1.设计命名规范

为了方便数据的管理和维护,需要在设计数据库时制定命名规范。命名规范应该依据表的功能和用途来命名,同时也要注意不要使用过长、过于复杂的表名和字段名。在设计数据库时,需要制定统一的命名规范,并严格执行。

2.启用缓存机制

为了提高数据读取的效率,可以通过启用缓存机制来减少数据库的压力。常见的缓存机制包括Redis、Memcache等,可以将常用数据保存在内存中,提高数据读取的速度。同时,也可以通过设置查询缓存、对象缓存等方式来优化数据操作的效率。

3.合理使用索引

索引是数据库查询的重要依据之一,它可以极大地提高数据操作的效率。在设计数据库时,需要合理设置索引方式和范围,同时也要避免过度索引和无效索引的问题。通过监控和调整索引的使用,可以优化数据库的性能和响应速度。

4.定期维护和优化

为了确保数据库的稳定性和性能,需要定期维护和优化数据库。主要包括清理冗余数据、优化索引规则、更新存储引擎等操作。同时还需要对数据库进行监控和评估,对性能下降和异常情况进行及时处理。

综上所述,,是企业信息化建设中不可或缺的一环。在实际应用中,需要遵循数据库设计原则,创新数据库设计技巧,采用合适的存储引擎和分区方式,选择适合自己的数据库类型和云数据库,同时也需要不断参照更佳实践,定期维护和优化数据库,以保证数据库的高效和稳定。

相关问题拓展阅读:

大型数据库的设计原则与开发技巧

随着计算机技术越来越广泛地应用于国民经济的各个领域 在计算机硬件不断微型化的同时 应用系统向着复杂化 大型化的方向发展 数据库是整个系统的核心 它的设计直接关系系统执行的效率和系统的稳定性 因此在软件系统开发中 数据库设计应遵循必要的数据库范式理论 以减少冗余 保证数据的完整性与正确性 只有在合适的数据库产品上设计出合理的数据库模型 才能降低整个系统的编程和维护难度 提高系统的实际运行效率 虽然对于小项目或中等规模的项目开发人员可以很容易地利用范式理论设计出一套符合要求的数据库 但对于一个包含大型数据库的软件项目 就必须有一套完整的设计原则与技巧

  

一 成立数据小组

  大型数据库数据元素多 在设计上有必要成立专门的数据小组 由于数据库设计者不一定是使用者 对系统设计中的数据元素不可能考虑周全 数据库设计出来后 往往难以找到所需的库表 因此数据小组更好由熟悉业务的项目骨干组成

  数据小组的职能并非是设计数据库 而是通过需求分析 在参考其他相似系颤腔统的基础上 提取系统的基本数据元素 担负对数据库的审核 审核内容包括审核新的数据库元素是否完全 能否实现全部业务需求 对旧数据库(如果存在旧系统)的分析及数据转换 数据库设计的审核 控制及必要调整

  

二 设计原冲迟则

   规范命名 所有的库名 表名 域名必须遵循统一的命名规则 并进行必要说明 以方便设计 维护 查询

   控制字段的引用 在设计时 可以选择适当的数据库设计管理工具 以方便开发人员的分布式设计和数据小组的集中审核管理 采用统一的命名规则 如果设计的字段已经存在 可直接引用 否则 应重新设计

   库表重复控制 在设计过程中 如果发现大部分字段都已存在 开发人员应怀疑所设计的库表是否已存在 通过对字段所在库表及相应设计人员的查询 可以确认库表是否确实重复

   并发控制 设计中应进行并发控制 即对于同一个库表 在茄判衫同一时间只有一个人有控制权 其他人只能进行查询

   必要的讨论 数据库设计完成后 数据小组应与相关人员进行讨论 通过讨论来熟悉数据库 从而对设计中存在的问题进行控制或从中获取数据库设计的必要信息

   数据小组的审核 库表的定版 修改最终都要通过数据小组的审核 以保证符合必要的要求

   头文件处理 每次数据修改后 数据小组要对相应的头文件进行修改(可由管理软件自动完成) 并通知相关的开发人员 以便进行相应的程序修改

 

 三 设计技巧

   分类拆分数据量大的表 对于经常使用的表(如某些参数表或代码对照表) 由于其使用频率很高 要尽量减少表中的记录数量 例如 银行的户主账表原来设计成一张表 虽然可以方便程序的设计与维护 但经过分析发现 由于数据量太大 会影响数据的迅速定位 如果将户主账表分别设计为活期户主账 定期户主账及对公户主账等 则可以大大提高查询效率

   索引设计 对于大的数据库表 合理的索引能够提高整个数据库的操作效率 在索引设计中 索引字段应挑选重复值较少的字段 在对建有复合索引的字段进行检索时 应注意按照复合索引字段建立的顺序进行 例如 如果对一个 万多条记录的流水表以日期和流水号为序建立复合索引 由于在该表中日期的重复值接近整个表的记录数 用流水号进行查询所用的时间接近 秒 而如果以流水号为索引字段建立索引进行相同的查询 所用时间不到 秒 因此在大型数据库设计中 只有进行合理的索引字段选择 才能有效提高整个数据库的操作效率

   数据操作的优化 在大型数据库中 如何提高数据操作效率值得关注 例如 每在数据库流水表中增加一笔业务 就必须从流水控制表中取出流水号 并将其流水号的数值加一 正常情况下 单笔操作的反应速度尚属正常 但当用它进行批量业务处理时 速度会明显减慢 经过分析发现 每次对流水控制表中的流水号数值加一时都要锁定该表 而该表却是整个系统操作的核心 有可能在操作时被其他进程锁定 因而使整个事务操作速度变慢 对这一问题的解决的办法是 根据批量业务的总笔数批量申请流水号 并对流水控制表进行一次更新 即可提高批量业务处理的速度 另一个例子是对插表的优化 对于大批量的业务处理 如果在插入数据库表时用普通的Insert语句 速度会很慢 其原因在于 每次插表都要进行一次I/O操作 花费较长的时间 改进后 可以用Put语句等缓冲区形式等满页后再进行I/O操作 从而提高效率 对大的数据库表进行删除时 一般会直接用Delete语句 这个语句虽然可以进行小表操作 但对大表却会因带来大事务而导致删除速度很慢甚至失败 解决的方法是去掉事务 但更有效的办法是先进行Drop操作再进行重建

   数据库参数的调整 数据库参数的调整是一个经验不断积累的过程 应由有经验的系统管理员完成 以Informix数据库为例 记录锁的数目太少会造成锁表的失败 逻辑日志的文件数目太少会造成插入大表失败等 这些问题都应根据实际情况进行必要的调整

   必要的工具 在整个数据库的开发与设计过程中 可以先开发一些小的应用工具 如自动生成库表的头文件 插入数据的初始化 数据插入的函数封装 错误跟踪或自动显示等 以此提高数据库的设计与开发效率

   避免长事务 对单个大表的删除或插入操作会带来大事务 解决的办法是对参数进行调整 也可以在插入时对文件进行分割 对于一个由一系列小事务顺序操作共同构成的长事务(如银行交易系统的日终交易) 可以由一系列操作完成整个事务 但其缺点是有可能因整个事务太大而使不能完成 或者 由于偶然的意外而使事务重做所需的时间太长 较好的解决方法是 把整个事务分解成几个较小的事务 再由应用程序控制整个系统的流程 这样 如果其中某个事务不成功 则只需重做该事务 因而既可节约时间 又可避免长事务

   适当超前 计算机技术发展日新月异 数据库的设计必须具有一定前瞻性 不但要满足当前的应用要求 还要考虑未来的业务发展 同时必须有利于扩展或增加应用系统的处理功能

lishixinzhi/Article/program/SQL/202311/16498

购物网站数据库设计

要这样,这样你会有无数多的表,而且以后新的一个产品时候非常麻烦,如果要属于新的类别,而且还会因为避免数据库太复杂而使得许多不同类的产品归在一个类。而且你的程序很麻烦,要肢升棚为每个类编写不同程序,因为数据表名不同。

应该用下面的办法,主要使用四个表存储所有类别的商品:

之一、类别名称表,字段有

类别ID,类别名称

1电脑

2洗衣机

第二、类别属性表,字段有:

类别ID,属性ID,属性名称

11CPU

12内存

13屏幕尺寸

21容量

22类型

第三、商品名称表,字历则段有:

商品ID,类别ID

第四、商品属性表,字段有:

商品ID,属性ID,属性值

11P4

12128M

13CRT14

21P4

22512M

23LCD19

319公斤

32滚筒

418公斤

42波轮

上面定义了四个商品,商品ID为1~4,分别是128M、512M内存的电脑,和9公斤滚筒、8公斤的波轮洗衣机。

这样定义的数据库结构,可以包含任何商品,一般不会笑旅改变,那么程序也就无需改变,定义新的产品、或者修改现有商品只需要在程序界面有操作员点点鼠标。

请简要的叙述一下数据库的主要设计过程

一、数据库设计过程

数据库技术是信息资源管理最有效的手段。

数据库设计是指:对于一个给定的应用环境,构造更优的数据库模式,建立数据库及其应用系统,有效存储数据,满足用户信息要求和处理要求。

数据库设计的各阶段:

A、需求分析阶段:综合各个用户的应用需求(现实世界的需求)。

B、在概念设计阶段:形成独立于机器和各DBMS产品的概念模式(信息世界模型),用E-R图来描述。

C、在逻辑设计阶段:将E-R图转换成具体的数据库产品支持的数据模型,如关系模型,形成数据库逻辑模式。然后根据用户处理的要求,安全性的考虑,在基本表的基础上再建立必要的视图(VIEW)形成数据的外模式。

D、在物理设计阶段:根据DBMS特点和处理的需要,进行物理存储安排,设计索引,形成数据库内模式。

1. 需求分析阶段

需求收集和分析,结果得到数据字典描述的数据需求(和数据流图描述的处理需求)。

需求分析的重点:调查、收集与分析用户在数据管理中的信息要求、处理要求、安全性与完整性要求。

需求分析的方法:调查组织机构情况、各部门的业务活动情况、协助用户明确对新系统的各种要求、确定新系统的边界。

常用的调查方法有: 跟班作业、开调查会、请专人介绍、询问、设计调查表请用户填写、查阅记录。

分析和表达用户需求的方法主要包括自顶向下和自底向上两类方法。自顶向下的结构化分析方法(Structured Analysis,简称SA方法)从最上层的系统组织机构入手,采用逐层分解的方式分析系统,并把每一层用数据流图和数据字典描述。

数据流图表达了数据和处理过程的关系。系统中的数据则借助数据字典(Data Dictionary,简称DD)来描述。

2. 概念结构设计阶段

通过对用户碰粗需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概薯陆念模型,可以用E-R图表示。

概念模型用于信息世界的建模。概念模型不依赖于某一个DBMS支持的数据模型。概念模型可以转换为计算机上某一DBMS支持的特定数据模型。

概念模型特点:

(1) 具有较强的语义表达能力,能够方便、直接地表达应用中的各种语义知识。

(2) 应该简单、清晰、易于用户理解,是用户与数据库设计人员之间进行交流的语言。

概念模型设计的一种常用方法为IDEF1X方法,它就是把实体-联系方法应用到语义数据模型中的一种语义模型化技术,用于建立系统信息模型。

作者: 小灵, 出处:论坛, 责任编辑: 李书琴,:17

本文详细解析了数据库设计过程、设计技巧以及总结了数据库命名规范……

2.1 第零步——初始化工程

这个阶段的任务是从目的描述和范围描述开始,确定建模目标,开发建模计划,组织建模队伍,收集源材料,制定约束和规范。收集源材料是这阶段的重点。通过调查和观察结果,业务流程,原有系统的输入输出,各种报表,收集原始数据,形成了基本数据资笑手镇料表。

2.2 之一步——定义实体

实体集成员都有一个共同的特征和属性集,可以从收集的源材料——基本数据资料表中直接或间接标识出大部分实体。根据源材料名字表中表示物的术语以及具有 “代码”结尾的术语,如客户代码、代理商代码、产品代码等将其名词部分代表的实体标识出来,从而初步找出潜在的实体,形成初步实体表。

2.3 第二步——定义联系

IDEF1X模型中只允许二元联系,n元联系必须定义为n个二元联系。根据实际的业务需求和规则,使用实体联系矩阵来标识实体间的二元关系,然后根据实际情况确定出连接关系的势、关系名和说明,确定关系类型,是标识关系、非标识关系(强制的或可选的)还是非确定关系、分类关系。如果子实体的每个实例都需要通过和父实体的关系来标识,则为标识关系,否则为非标识关系。非标识关系中,如果每个子实体的实例都与而且只与一个父实体关联,则为强制的,否则为非强制的。如果父实体与子实体代表的是同一现实对象,那么它们为分类关系。

2.4 第三步——定义码

通过引入交叉实体除去上一阶段产生的非确定关系,然后从非交叉实体和独立实体开始标识侯选码属性,以便唯一识别每个实体的实例,再从侯选码中确定主码。为了确定主码和关系的有效性,通过非空规则和非多值规则来保证,即一个实体实例的一个属性不能是空值,也不能在同一个时刻有一个以上的值。找出误认的确定关系,将实体进一步分解,最后构造出IDEF1X模型的键基视图(KB图)。

2.5 第四步——定义属性

从源数据表中抽取说明性的名词开发出属性表,确定属性的所有者。定义非主码属性,检查属性的非空及非多值规则。此外,还要检查完全依赖函数规则和非传递依赖规则,保证一个非主码属性必须依赖于主码、整个主码、仅仅是主码。以此得到了至少符合关系理论第三范式的改进的IDEF1X模型的全属性视图。

2.6 第五步——定义其他对象和规则

定义属性的数据类型、长度、精度、非空、缺省值、约束规则等。定义触发器、存储过程、视图、角色、同义词、序列等对象信息。

3. 逻辑结构设计阶段

将概念结构转换为某个DBMS所支持的数据模型(例如关系模型),并对其进行优化。设计逻辑结构应该选择最适于描述与表达相应概念结构的数据模型,然后选择最合适的DBMS。

将E-R图转换为关系模型实际上就是要将实体、实体的属性和实体之间的联系转化为关系模式,这种转换一般遵循如下原则:一个实体型转换为一个关系模式。实体的属性就是关系的属性。实体的码就是关系的码。

数据模型的优化,确定数据依赖,消除冗余的联系,确定各关系模式分别属于第几范式。确定是否要对它们进行合并或分解。一般来说将关系分解为3NF的标准,即:

表内的每一个值都只能被表达一次。

表内的每一行都应该被唯一的标识(有唯一键)。

表内不应该存储依赖于其他键的非键信息。

作者: 小灵, 出处:论坛, 责任编辑: 李书琴,:17

本文详细解析了数据库设计过程、设计技巧以及总结了数据库命名规范……

4. 数据库物理设计阶段

为逻辑数据模型选取一个最适合应用环境的物理结构(包括存储结构和存取方法)。根据DBMS特点和处理的需要,进行物理存储安排,设计索引,形成数据库内模式。

5. 数据库实施阶段

运用DBMS提供的数据语言(例如SQL)及其宿主语言(例如C),根据逻辑设计和物理设计的结果建立数据库,编制与调试应用程序,组织数据入库,并进行试运行。 数据库实施主要包括以下工作:用DDL定义数据库结构、组织数据入库 、编制与调试应用程序、数据库试运行 ,(Data Definition Language(DDL数据定义语言)用作开新数据表、设定字段、删除数据表、删除字段,管理所有有关数据库结构的东西)

●Create (新增有关数据库结构的东西,属DDL)

●Drop (删除有关数据库结构的东西,属DDL)

●Alter (更改结构,属DDL)

6. 数据库运行和维护阶段

在数据库系统运行过程中必须不断地对其进行评价、调整与修改。内容包括:数据库的转储和恢复、数据库的安全性、完整性控制、数据库性能的监督、分析和改进、数据库的重组织和重构造。

7. 建模工具的使用

为加快数据库设计速度,目前有很多数据库辅助工具(CASE工具),如Rational公司的Rational Rose,CA公司的Erwin和Bpwin,Sybase公司的PowerDesigner以及Oracle公司的oracle Designer等。

ERwin主要用来建立数据库的概念模型和物理模型。它能用图形化的方式,描述出实体、联系及实体的属性。ERwin支持IDEF1X方法。通过使用 ERwin建模工具自动生成、更改和分析IDEF1X模型,不仅能得到优秀的业务功能和数据需求模型,而且可以实现从IDEF1X模型到数据库物理设计的转变。ERwin工具绘制的模型对应于逻辑模型和物理模型两种。在逻辑模型中,IDEF1X工具箱可以方便地用图形化的方式构建和绘制实体联系及实体的属性。在物理模型中,ERwin可以定义对应的表、列,并可针对各种数据库管理系统自动转换为适当的类型。

设计人员可根据需要选用相应的数据库设计建模工具。例如需求分析完成之后,设计人员可以使用Erwin画ER图,将ER图转换为关系数据模型,生成数据库结构;画数据流图,生成应用程序。

二、数据库设计技巧

1. 设计数据库之前(需求分析阶段)

1) 理解客户需求,包括用户未来需求变化。

2) 了解企业业务类型,可以在开发阶段节约大量的时间。

3) 重视输入(要记录的数据)、输出(报表、查询、视图)。

4) 创建数据字典和ER 图表

数据字典(Data Dictionary,简称DD)是各类数据描述的,是关于数据库中数据的描述,即元数据,不是数据本身。(至少应该包含每个字段的数据类型和在每个表内的主外键)。

数据项描述: 数据项名,数据项含义说明,别名,数据类型,长度,取值范围,取值含义,与其他数据项的逻辑关系

数据结构描述: 数据结构名,含义说明,组成:

数据流描述: 数据流名,说明,数据流来源,数据流去向, 组成:,平均流量,高峰期流量

数据存储描述: 数据存储名,说明,编号,流入的数据流,流出的数据流,组成:,数据量,存取方式

处理过程描述: 处理过程名,说明,输入:,输出:,处理:

ER 图表和数据字典可以让任何了解数据库的人都明确如何从数据库中获得数据。ER图对表明表之间关系很有用,而数据字典则说明了每个字段的用途以及任何可能存在的别名。对SQL 表达式的文档化来说这是完全必要的。

5) 定义标准的对象命名规范

数据库各种对象的命名必须规范。

作者: 小灵, 出处:论坛, 责任编辑: 李书琴,:17

本文详细解析了数据库设计过程、设计技巧以及总结了数据库命名规范……

2. 表和字段的设计(数据库逻辑设计)

表设计原则

1) 标准化和规范化

数据的标准化有助于消除数据库中的数据冗余。标准化有好几种形式,但Third Normal Form(3NF)通常被认为在性能、扩展性和数据完整性方面达到了更好平衡。简单来说,遵守3NF 标准的数据库的表设计原则是:“One Fact in One Place”即某个表只包括其本身基本的属性,当不是它们本身所具有的属性时需进行分解。表之间的关系通过外键相连接。它具有以下特点:有一组表专门存放通过键连接起来的关联数据。

2) 数据驱动

采用数据驱动而非硬编码的方式,许多策略变更和维护都会方便得多,大大增强系统的灵活性和扩展性。

举例,假如用户界面要访问外部数据源(文件、XML 文档、其他数据库等),不妨把相应的连接和路径信息存储在用户界面支持的表里。如果用户界面执行工作流之类的任务(发送邮件、打印信笺、修改记录状态等),那么产生工作流的数据也可以存放在数据库里。角色权限管理也可以通过数据驱动来完成。事实上,如果过程是数据驱动的,你就可以把相当大的责任推给用户,由用户来维护自己的工作流过程。

3) 考虑各种变化

在设计数据库的时候考虑到哪些数据字段将来可能会发生变更。

4) 表名、报表名和查询名的命名规范

(采用前缀命名)检查表名、报表名和查询名之间的命名规范。你可能会很快就被这些不同的数据库要素的名称搞糊涂了。你可以统一地命名这些数据库的不同组成部分,至少你应该在这些对象名字的开头用 Table、Query 或者 Report 等前缀加以区别。如果采用了 Microsoft Access,你可以用 qry、rpt、tbl 和 mod 等符号来标识对象(比如 tbl_Employees)。用 sp_company 标识存储过程,用 udf_ (或者类似的标记)标识自定义编写的函数。

字段设计原则:

1) 每个表中都应该添加的3 个有用的字段。

dRecordCreationDate,在SQL Server 下默认为GETDATE()

sRecordCreator,在SQL Server 下默认为NOT NULL DEFAULT USER

nRecordVersion,记录的版本标记;有助于准确说明记录中出现null 数据或者丢失数据的原因

时效性数据应包括“最近更新日期/时间”字段。时间标记对查找数据问题的原因、按日期重新处理/重载数据和清除旧数据特别有用。

2) 对地址和采用多个字段

描述街道地址就短短一行记录是不够的。Address_Line1、Address_Line2 和Address_Line3 可以提供更大的灵活性。还有,号码和邮件地址更好拥有自己的数据表,其间具有自身的类型和标记类别。

3) 表内的列的命名规则(采用前缀/后缀命名)、采用有意义的字段名

对列名应该采用标准的前缀和后缀。如键是数字类型:用 _N 后缀;字符类型:_C 后缀;日期类型:_D 后缀。再如,假如你的表里有好多“money”字段,你不妨给每个列增加一个 _M 后缀。

作者: 小灵, 出处:论坛, 责任编辑: 李书琴,:17

本文详细解析了数据库设计过程、设计技巧以及总结了数据库命名规范……

假设有两个表:

Customer 和 Order。Customer 表的前缀是 cu_,所以该表内的子段名如下:cu_name_id、cu_surname、cu_initials 和cu_address 等。Order 表的前缀是 or_,所以子段名是:

or_order_id、or_cust_name_id、or_quantity 和 or_description 等。

这样从数据库中选出全部数据的 SQL 语句可以写成如下所示:

Select * From Customer, Order Where cu_surname = “MYNAME” ;

and cu_name_id = or_cust_name_id and or_quantity = 1

在没有这些前缀的情况下则写成这个样子(用别名来区分):

Select * From Customer, Order Where Customer.surname = “MYNAME” ;

and Customer.name_id = Order.cust_name_id and Order.quantity = 1

第 1 个 SQL 语句没少键入多少字符。但如果查询涉及到 5 个表乃至更多的列你就知道这个技巧多有用了。

5) 选择数字类型和文本类型的长度应尽量充足

假设客户ID 为10 位数长。那你应该把数据库表字段的长度设为12 或者13 个字符长。但这额外占据的空间却无需将来重构整个数据库就可以实现数据库规模的增长了。

6) 增加删除标记字段

在表中包含一个“删除标记”字段,这样就可以把行标记为删除。在关系数据库里不要单独删除某一行;更好采用清除数据程序而且要仔细维护索引整体性。

7) 提防大小写混用的对象名和特殊字符

采用全部大写而且包含下划符的名字具有更好的可读性(CUSTOMER_DATA),绝对不要在对象名的字符之间留空格。

8) 小心保留词

要保证你的字段名没有和保留词、数据库系统或者常用访问方法冲突,比如,用 DESC 作为说明字段名。后果可想而知!DESC 是 DESCENDING 缩写后的保留词。表里的一个 SELECT * 语句倒是能用,但得到的却是一大堆毫无用处的信息。

9) 保持字段名和类型的一致性

在命名字段并为其指定数据类型的时候一定要保证一致性。假如字段在表1中叫做“agreement_number”,就别在表2里把名字改成 “ref1”。假如数据类型在表1里是整数,那在表2里可就别变成字符型了。当然在表1(ABC)有处键ID,则为了可读性,在表2做关联时可以命名为 ABC_ID。

10) 避免使用触发器

触发器的功能通常可以用其他方式实现。在调试程序时触发器可能成为干扰。假如你确实需要采用触发器,你更好集中对它文档化。

作者: 小灵, 出处:论坛, 责任编辑: 李书琴,:17

本文详细解析了数据库设计过程、设计技巧以及总结了数据库命名规范……

3. 选择键和索引(数据库逻辑设计)

参考:《SQL优化-索引》一文

4. 数据完整性设计(数据库逻辑设计)

1) 完整性实现机制:

实体完整性:主键

参照完整性:

父表中删除数据:级联删除;受限删除;置空值

父表中插入数据:受限插入;递归插入

父表中更新数据:级联更新;受限更新;置空值

DBMS对参照完整性可以有两种方法实现:外键实现机制(约束规则)和触发器实现机制用户定义完整性:

NOT NULL;CHECK;触发器

2) 用约束而非商务规则强制数据完整性

采用数据库系统实现数据的完整性。这不但包括通过标准化实现的完整性而且还包括数据的功能性。不要依赖于商务层保证数据完整性;它不能保证表之间(外键) 的完整性所以不能强加于其他完整性规则之上。如果你在数据层确实采用了约束,你要保证有办法把更新不能通过约束检查的原因采用用户理解的语言通知用户界面。

3) 强制指示完整性

在有害数据进入数据库之前将其剔除。激活数据库系统的指示完整性特性。这样可以保持数据的清洁而能迫使开发人员投入更多的时间处理错误条件。

4) 使用查找控制数据完整性

控制数据完整性的更佳方式就是限制用户的选择。只要有可能都应该提供给用户一个清晰的价值列表供其选择。这样将减少键入代码的错误和误解同时提供数据的一致性。某些公共数据特别适合查找:国家代码、状态代码等。

5) 采用视图

为了在数据库和应用程序代码之间提供另一层抽象,可以为应用程序建立专门的视图而不必非要应用程序直接访问数据表。这样做还等于在处理数据库变更时给你提供了更多的自由。

6) 分布式数据系统

对分布式系统而言,在你决定是否在各个站点复制所有数据还是把数据保存在一个地方之前应该估计一下未来 5 年或者 10 年的数据量。当你把数据传送到其他站点的时候,更好在数据库字段中设置一些标记,在目的站点收到你的数据之后更新你的标记。为了进行这种数据传输,请写下你自己的批处理或者调度程序以特定时间间隔运行而不要让用户在每天的工作后传输数据。本地拷贝你的维护数据,比如计算常数和利息率等,设置版本号保证数据在每个站点都完全一致。

7) 关系

如果两个实体之间存在多对一关系,而且还有可能转化为多对多关系,那么你更好一开始就设置成多对多关系。从现有的多对一关系转变为多对多关系比一开始就是多对多关系要难得多。

8) 给数据保有和恢复制定计划

考虑数据保存策略并包含在设计过程中,预先设计你的数据恢复过程。采用可以发布给用户/开发人员的数据字典实现方便的数据识别同时保证对数据源文档化。编写在线更新来“更新查询”供以后万一数据丢失可以重新处理更新。

9) 用存储过程让系统做重活

提供一整套常规的存储过程来访问各组以便加快速度和简化客户程序代码的开发。数据库不只是一个存放数据的地方,它也是简化编码之地。

本文详细解析了数据库设计过程、设计技巧以及总结了数据库命名规范……

5. 其他设计技巧

1) 避免使用触发器

触发器的功能通常可以用其他方式实现。在调试程序时触发器可能成为干扰。假如你确实需要采用触发器,你更好集中对它文档化。

2) 使用常用英语(或者其他任何语言)而不要使用编码

在创建下拉菜单、列表、报表时更好按照英语名排序。假如需要编码,可以在编码旁附上用户知道的英语。

3) 保存常用信息

让一个表专门存放一般数据库信息非常有用。在这个表里存放数据库当前版本、最近检查/修复(对Access)、关联设计文档的名称、客户等信息。这样可以实现一种简单机制跟踪数据库,当客户抱怨他们的数据库没有达到希望的要求而与你联系时,这样做对非客户机/服务器环境特别有用。

4) 包含版本机制

在数据库中引入版本控制机制来确定使用中的数据库的版本。时间一长,用户的需求总是会改变的。最终可能会要求修改数据库结构。把版本信息直接存放到数据库中更为方便。

5) 编制文档

对所有的快捷方式、命名规范、限制和函数都要编制文档。

采用给表、列、触发器等加注释的 数据库工具。对开发、支持和跟踪修改非常有用。

对数据库文档化,或者在数据库自身的内部或者单独建立文档。这样,当过了一年多时间后再回过头来做第2 个版本,犯错的机会将大大减少。

6) 测试、测试、反复测试

建立或者修订数据库之后,必须用用户新输入的数据测试数据字段。最重要的是,让用户进行测试并且同用户一道保证选择的数据类型满足商业要求。测试需要在把新数据库投入实际服务之前完成。

7) 检查设计

在开发期间检查数据库设计的常用技术是通过其所支持的应用程序原型检查数据库。换句话说,针对每一种最终表达数据的原型应用,保证你检查了数据模型并且查看如何取出数据。

三、数据库命名规范

1. 实体(表)的命名

1) 表以名词或名词短语命名,确定表名是采用复数还是单数形式,此外给表的别名定义简单规则(比方说,如果表名是一个单词,别名就取单词的前4 个字母;如果表名是两个单词,就各取两个单词的前两个字母组成4 个字母长的别名;如果表的名字由3 个单词组成,从头两个单词中各取一个然后从最后一个单词中再取出两个字母,结果还是组成4 字母长的别名,其余依次类推)

对工作用表来说,表名可以加上前缀WORK_ 后面附上采用该表的应用程序的名字。在命名过程当中,根据语义拼凑缩写即可。注意:将字段名称会统一成大写或者小写中的一种,故中间加上下划线。

作者: 小灵, 出处:论坛, 责任编辑: 李书琴,:17

本文详细解析了数据库设计过程、设计技巧以及总结了数据库命名规范……

举例:

定义的缩写 Sales: Sal 销售;

Order: Ord 订单;

Detail: Dtl 明细;

则销售订单明细表命名为:Sal_Ord_Dtl;

2) 如果表或者是字段的名称仅有一个单词,那么建议不使用缩写,而是用完整的单词。

举例:

定义的缩写 Material Ma 物品;

物品表名为:Material, 而不是 Ma.

但是字段物品编码则是:Ma_ID;而不是Material_ID

3) 所有的存储值列表的表前面加上前缀Z

目的是将这些值列表类排序在数据库最后。

4) 所有的冗余类的命名(主要是累计表)前面加上前缀X

冗余类是为了提高数据库效率,非规范化数据库的时候加入的字段或者表

5) 关联类通过用下划线连接两个基本类之后,再加前缀R的方式命名,后面按照字母顺序罗列两个表名或者表名的缩写。

关联表用于保存多对多关系。

如果被关联的表名大于10个字母,必须将原来的表名的进行缩写。如果没有其他原因,建议都使用缩写。

举例:表Object与自身存在多对多的关系,则保存多对多关系的表命名为:R_Object;

作者: 小灵, 出处:论坛, 责任编辑: 李书琴,:17

本文详细解析了数据库设计过程、设计技巧以及总结了数据库命名规范……

2. 属性(列)的命名

1) 采用有意义的列名

表内的列要针对键采用一整套设计规则。每一个表都将有一个自动ID作为主健,逻辑上的主健作为之一组候选主健来定义;

A、如果是数据库自动生成的编码,统一命名为:ID

B、如果是自定义的逻辑上的编码则用缩写加“ID”的方法命名,即“XXXX_ID”

C、如果键是数字类型,你可以用_NO 作为后缀;

D、如果是字符类型则可以采用_CODE 后缀

E、对列名应该采用标准的前缀和后缀。

举例:销售订单的编号字段命名:Sal_Ord_ID;如果还存在一个数据库生成的自动编号,则命名为:ID。

2) 所有的属性加上有关类型的后缀

注意,如果还需要其它的后缀,都放在类型后缀之前。

注: 数据类型是文本的字段,类型后缀TX可以不写。有些类型比较明显的字段,可以不写类型后缀。

3) 采用前缀命名

给每个表的列名都采用统一的前缀,那么在编写SQL表达式的时候会得到大大的简化。这样做也确实有缺点,比如破坏了自动表连接工具的作用,后者把公共列名同某些数据库联系起来。

3. 视图的命名

1) 视图以V作为前缀,其他命名规则和表的命名类似;

2) 命名应尽量体现各视图的功能。

4. 触发器的命名(尽量不使用)

触发器以TR作为前缀,触发器名为相应的表名加上后缀,Insert触发器加’_I’,Delete触发器加’_D’,Update触发器加’_U’,如:TR_Customer_I,TR_Customer_D,TR_Customer_U。

5. 存储过程名

存储过程应以’UP_’开头,和系统的存储过程区分,后续部分主要以动宾形式构成,并用下划线分割各个组成部分。如增加代理商的帐户的存储过程为’UP_Ins_Agent_Account’。

6. 变量名

变量名采用小写,若属于词组形式,用下划线分隔每个单词,如@my_err_no。

7. 命名中其他注意事项

1) 以上命名都不得超过30个字符的系统限制。变量名的长度限制为29(不包括标识字符@)。

2) 数据对象、变量的命名都采用英文字符,禁止使用中文命名。绝对不要在对象名的字符之间留空格。

3) 小心保留词,要保证你的字段名没有和保留词、数据库系统或者常用访问方法冲突

关于数据库设计新的的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » 创新数据库设计技巧,提高数据操作效率 (数据库设计新的)