
选择数据库管理系统时应从以下几个方面予以考虑:
(1) 构造数据库的难易程度。
需要分析数据库管理系统有没有范式的要求,即是否必须按照系统所规定的数据模型分析现实世界,建立相应的模型;数据库管理语句是否符合国际标准,符合国际标准则便于系统的维护、开发、移植;有没有面向用户的易用的开发工具;所支持的数据库容量,数据库的容量特性决定了数据库管理系统的使用范围。
(2) 程序开发的难易程度。
有无计算机辅助软件工程工具CASE——计算机辅助软件工程工具可以帮助开发者根据软件工程的方法提供各开发阶段的维护、编码环境,便于复杂软件的开发、维护。有无第四代语言的开发平台——第四代语言具有非过程语言的设计方法,用户不需编写复杂的过程性代码,易学、易懂、易维护。有无面向对象的设计平台——面向对象的设计思想十分接近人类的逻辑思维方式,便于开发和维护。对多媒体数据类型的支持——多媒体数据需求是今后发展的趋势,支持多媒体数据类型的数据库管理系统必将减少应用程序的开发和维护工作。
(3)数据库管理系统的性能分析。
包括性能评估(响应时间、数据单位时间吞吐量)、性能监控(内外存使用情况、系统输入/输出速率、SQL语句的执行,数据库元组控制)、性能管理(参数设定与调整)。
(4) 对分布式应用的支持。
包括数据透明与网络透明程度。数据透明是指用户在应用中不需指出数据在网络中的什么节点上,数据库管理系统可以自动搜索网络,提取所需数据;网络透明是指用户在应用中无需指出网络所采用的协议。数据库管理系统自动将数据包转换成相应的协议数据。
(5)并行处理能力。
支持多CPU模式的系统(SMP,CLUSTER,MPP),负载的分配形式,并行处理的颗粒度、范围。
(6) 可移植性和可扩展性。
可移植性指垂直扩展和水平扩展能力。垂直扩展要求新平台能够支持低版本的平台,数据库客户机/服务器机制支持集中式管理模式,这样保证用户以前的投资和系统;水平扩展要求满足硬件上的扩展,支持从单CPU模式转换成多CPU并行机模式( SMP, CLUSTER, MPP)
(7)数据完整性约束。
数据完整性指数据的正确性和一致性保护,包括实体完整性、参照完整性、复杂的事务规则。
(8)并发控制功能。
对于分布式数据库管理系统,并发控制功能是必不可少的。因为它面临的是多任务分布环境,可能会有多个用户点在同一时刻对同一数据进行读或写 *** 作,为了保证数据的一致性,需要由数据库管理系统的并发控制功能来完成。评价并发控制的标准应从下面几方面加以考虑:
保证查询结果一致性方法
数据锁的颗粒度(数据锁的控制范围,表、页、元组等)
数据锁的升级管理功能
(9) 容错能力。
异常情况下对数据的容错处理。评价标准:硬件的容错,有无磁盘镜象处理功能软件的容错,有无软件方法 (10) 安全性控制
包括安全保密的程度(帐户管理、用户权限、网络安全控制、数据约束)
(11) 支持多种文字处理能力
包括数据库描述语言的多种文字处理能力(表名、域名、数据)和数据库开发工具对多种文字的支持能力。
(12)数据恢复的能力
当突然停电、出现硬件故障、软件失效、病毒或严重错误 *** 作时,系统应提供恢复数据库的功能,如定期转存、恢复备份、回滚等,使系统有能力将数据库恢复到损坏以前的状态。
1 原始单据与实体之间的关系
可以是一对一、一对多、多对多的关系。在一般情况下,它们是一对一的关系:即一张原始单据对应且只对应一个实体。
在特殊情况下,它们可能是一对多或多对一的关系,即一张原始单证对应多个实体,或多张原始单证对应一个实体。
这里的实体可以理解为基本表。
〖例1〗:一份员工履历资料,在人力资源信息系统中,就对应三个基本表:员工基本情况表、社会关系表、工作简历表。 这就是“一张原始单证对应多个实体”的典型例子。
2 主键与外键
一般而言,一个实体不能既无主键又无外键。在E—R 图中, 处于叶子部位的实体, 可以定义主键,也可以不定义主键 (因为它无子孙), 但必须要有外键(因为它有父亲)。
主键与外键的设计,在全局数据库的设计中,占有重要地位。主键是实体的高度抽象,主键与外键的配对,表示实体之间的连接。
3 基本表的性质
基本表与中间表、临时表不同,因为它具有如下四个特性:
(1) 原子性。基本表中的字段是不可再分解的。
(2) 原始性。基本表中的记录是原始数据(基础数据)的记录。
(3) 演绎性。由基本表与代码表中的数据,可以派生出所有的输出数据。
(4) 稳定性。基本表的结构是相对稳定的,表中的记录是要长期保存的。
理解基本表的性质后,在设计数据库时,就能将基本表与中间表、临时表区分开来。
4 范式标准
基本表及其字段之间的关系, 应尽量满足第三范式。但是,满足第三范式的数据库设计,往往不是最好的设计。
为了提高数据库的运行效率,常常需要降低范式标准:适当增加冗余,达到以空间换时间的目的。
〖例2〗:有一张存放商品的基本表,如表1所示。“金额”这个字段的存在,表明该表的设计不满足第三范式, 因为“金额”可以由“单价”乘以“数量”得到,说明“金额”是冗余字段。但是,增加“金额”这个冗余字段, 可以提高查询统计的速度,这就是以空间换时间的作法。 在Rose 2002中,规定列有两种类型:数据列和计算列。“金额”这样的列被称为“计算列”,而“单价”和 “数量”这样的列被称为“数据列”。
5 通俗地理解三个范式
通俗地理解三个范式,对于数据库设计大有好处。在数据库设计中,为了更好地应用三个范式,就必须通俗地理解
三个范式(通俗地理解是够用的理解,并不是最科学最准确的理解):
第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解;
第二范式:2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性;
第三范式:3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余。
没有冗余的数据库设计可以做到。但是,没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,就必须降
低范式标准,适当保留冗余数据。具体做法是:在概念数据模型设计时遵守第三范式,降低范式标准的工作放到物理
数据模型设计时考虑。降低范式就是增加字段,允许冗余。
6 要善于识别与正确处理多对多的关系
若两个实体之间存在多对多的关系,则应消除这种关系。消除的办法是,在两者之间增加第三个实体。这样,原来一
个多对多的关系,现在变为两个一对多的关系。要将原来两个实体的属性合理地分配到三个实体中去。这里的第三个
实体,实质上是一个较复杂的关系,它对应一张基本表。一般来讲,数据库设计工具不能识别多对多的关系,但能处
理多对多的关系。
〖例3〗:在“图书馆信息系统”中,“图书”是一个实体,“读者”也是一个实体。这两个实体之间的关系,是一 个典型的多对多关系:一本图书在不同时间可以被多个读者借阅,一个读者又可以借多本图书。为此,要在二者之 间增加第三个实体,该实体取名为“借还书”,它的属性为:借还时间、借还标志(0表示借书,1表示还书),另外, 它还应该有两个外键(“图书”的主键,“读者”的主键),使它能与“图书”和“读者”连接。
7 主键PK的取值方法
PK是供程序员使用的表间连接工具,可以是一无物理意义的数字串, 由程序自动加1来实现。也可以是有物理意义
的字段名或字段名的组合。不过前者比后者好。当PK是字段名的组合时,建议字段的个数不要太多,多了不但索引 占用空间大,而且速度也慢。
8 正确认识数据冗余
主键与外键在多表中的重复出现, 不属于数据冗余,这个概念必须清楚,事实上有许多人还不清楚。非键字段的重复出现, 才是数据冗余!而且是一种低级冗余,即重复性的冗余。高级冗余不是字段的重复出现,而是字段的派生出现。
〖例4〗:商品中的“单价、数量、金额”三个字段,“金额”就是由“单价”乘以“数量”派生出来的,它就是冗余,而且是一种高级冗余。冗余的目的是为了提高处理速度。只有低级冗余才会增加数据的不一致性,因为同一数据,可 能从不同时间、地点、角色上多次录入。因此,我们提倡高级冗余(派生性冗余),反对低级冗余(重复性冗余)。
9 E--R图没有标准答案
信息系统的E--R图没有标准答案,因为它的设计与画法不是惟一的,只要它覆盖了系统需求的业务范围和功能内容,就是可行的。反之要修改E--R图。尽管它没有惟一的标准答案,并不意味着可以随意设计。好的E—R图的标准是: 结构清晰、关联简洁、实体个数适中、属性分配合理、没有低级冗余。
10 视图技术在数据库设计中很有用
与基本表、代码表、中间表不同,视图是一种虚表,它依赖数据源的实表而存在。视图是供程序员使用数据库的 一个窗口,是基表数据综合的一种形式, 是数据处理的一种方法,是用户数据保密的一种手段。为了进行复杂处理、 提高运算速度和节省存储空间, 视图的定义深度一般不得超过三层。 若三层视图仍不够用, 则应在视图上定义临时表, 在临时表上再定义视图。这样反复交迭定义, 视图的深度就不受限制了。
对于某些与国家政治、经济、技术、军事和安全利益有关的信息系统,视图的作用更加重要。这些系统的基本表完 成物理设计之后,立即在基本表上建立第一层视图,这层视图的个数和结构,与基本表的个数和结构是完全相同。 并且规定,所有的程序员,一律只准在视图上 *** 作。只有数据库管理员,带着多个人员共同掌握的“安全钥匙”, 才能直接在基本表上 *** 作。
11 中间表、报表和临时表
中间表是存放统计数据的表,它是为数据仓库、输出报表或查询结果而设计的,有时它没有主键与外键(数据仓 库除外)。临时表是程序员个人设计的,存放临时记录,为个人所用。基表和中间表由DBA维护,临时表由程序员 自己用程序自动维护。
12 完整性约束表现在三个方面
域的完整性:用Check来实现约束,在数据库设计工具中,对字段的取值范围进行定义时,有一个Check按钮,通 过它定义字段的值城。
参照完整性:用PK、FK、表级触发器来实现。
用户定义完整性:它是一些业务规则,用存储过程和触发器来实现。
13 防止数据库设计打补丁的方法是“三少原则”
(1) 一个数据库中表的个数越少越好。只有表的个数少了,才能说明系统的E--R图少而精,去掉了重复的多余的 实体,形成了对客观世界的高度抽象,进行了系统的数据集成,防止了打补丁式的设计;
(2) 一个表中组合主键的字段个数越少越好。因为主键的作用,一是建主键索引,二是做为子表的外键,所以组 合主键的字段个数少了,不仅节省了运行时间,而且节省了索引存储空间;
(3) 一个表中的字段个数越少越好。只有字段的个数少了,才能说明在系统中不存在数据重复,且很少有数据冗 余,更重要的是督促读者学会“列变行”,这样就防止了将子表中的字段拉入到主表中去,在主表中留下许 多空余的字段。所谓“列变行”,就是将主表中的一部分内容拉出去,另外单独建一个子表。这个方法很简 单,有的人就是不习惯、不采纳、不执行。 数据库设计的实用原则是:在数据冗余和处理速度之间找到合适的平衡点。“三少”是一个整体概念,综合观点, 不能孤立某一个原则。该原则是相对的,不是绝对的。“三多”原则肯定是错误的。试想:若覆盖系统同样的功 能,一百个实体(共一千个属性) 的E--R图,肯定比二百个实体(共二千个属性) 的E--R图,要好得多。 提倡“三少”原则,是叫读者学会利用数据库设计技术进行系统的数据集成。数据集成的步骤是将文件系统集成 为应用数据库,将应用数据库集成为主题数据库,将主题数据库集成为全局综合数据库。集成的程度越高,数据 共享性就越强,信息孤岛现象就越少,整个企业信息系统的全局E—R图中实体的个数、主键的个数、属性的个数就会越少。
提倡“三少”原则的目的,是防止读者利用打补丁技术,不断地对数据库进行增删改,使企业数据库变成了随意设计数据库表的“垃圾堆”,或数据库表的“大杂院”,最后造成数据库中的基本表、代码表、中间表、临时表杂乱无章,不计其数,导致企事业单位的信息系统无法维护而瘫痪。 “三多”原则任何人都可以做到,该原则是“打补丁方法”设计数据库的歪理学说。“三少”原则是少而精的 原则,它要求有较高的数据库设计技巧与艺术,不是任何人都能做到的,因为该原则是杜绝用“打补丁方法”
设计数据库的理论依据。
14 提高数据库运行效率的办法
在给定的系统硬件和系统软件条件下,提高数据库系统的运行效率的办法是:
(1) 在数据库物理设计时,降低范式,增加冗余, 少用触发器, 多用存储过程。
(2) 当计算非常复杂、而且记录条数非常巨大时(例如一千万条),复杂计算要先在数据库外面,以文件系统方 式用C++语言计算处理完成之后,最后才入库追加到表中去。这是电信计费系统设计的经验。
(3) 发现某个表的记录太多,例如超过一千万条,则要对该表进行水平分割。水平分割的做法是,以该表主键 PK的某个值为界线,将该表的记录水平分割为两个表。若发现某个表的字段太多,例如超过八十个,则垂直分割该表,将原来的一个表分解为两个表。
(4) 对数据库管理系统DBMS进行系统优化,即优化各种系统参数,如缓冲区个数。
(5) 在使用面向数据的SQL语言进行程序设计时,尽量采取优化算法。
总之,要提高数据库的运行效率,必须从数据库系统级优化、数据库设计级优化、程序实现级优化,这三个层次上同时下功夫。
上述十四个技巧,是许多人在大量的数据库分析与设计实践中,逐步总结出来的。对于这些经验的运用,读者不能生帮硬套,死记硬背,而要消化理解,实事求是,灵活掌握。并逐步做到:在应用中发展,在发展中应用。
一个好的数据库产品不等于就有一个好的应用系统 如果不能设计一个合理的数据库模型 不仅会增加客户端和服务器段程序的编程和维护的难度 而且将会影响系统实际运行的性能 一般来讲 在一个MIS系统分析 设计 测试和试运行阶段 因为数据量较小 设计人员和测试人员往往只注意到功能的实现 而很难注意到性能的薄弱之处 等到系统投入实际运行一段时间后 才发现系统的性能在降低 这时再来考虑提高系统性能则要花费更多的人力物力 而整个系统也不可避免的形成了一个打补丁工程 笔者依据多年来设计和使用数据库的经验 提出以下一些设计准则 供同仁们参考
命名的规范
不同的数据库产品对对象的命名有不同的要求 因此 数据库中的各种对象的命名 后台程序的代码编写应采用大小写敏感的形式 各种对象命名长度不要超过 个字符 这样便于应用系统适应不同的数据库
游标(Cursor)的慎用
游标提供了对特定集合中逐行扫描的手段 一般使用游标逐行遍历数据 根据取出的数据不同条件进行不同的 *** 作 尤其对多表和大表定义的游标(大的数据集合)循环很容易使程序进入一个漫长的等特甚至死机 笔者在某市《住房公积金管理系统》进行日终帐户滚积数计息处理时 对一个 万个帐户的游标处理导致程序进入了一个无限期的等特(后经测算需 个小时才能完成)(硬件环境 Alpha/ Mram Sco Unix Sybase ) 后根据不同的条件改成用不同的UPDATE语句得以在二十分钟之内完成 示例如下
Declare Mycursor cursor for select count_no from COUNT
Open Mycursor
Fetch Mycursor into @vcount_no
While (@@sqlstatus= )
Begin
If @vcount_no= 条件
*** 作
If @vcount_no= 条件
*** 作
Fetch Mycursor into @vcount_no
End
改为
Update COUNT set *** 作 for 条件
Update COUNT set *** 作 for 条件
在有些场合 有时也非得使用游标 此时也可考虑将符合条件的数据行转入临时表中 再对临时表定义游标进行 *** 作 可时性能得到明显提高 笔者在某地市〈电信收费系统〉数据库后台程序设计中 对一个表( 万行中符合条件的 多行数据)进行游标 *** 作(硬件环境 PC服务器 PII Mram NT Ms Sqlserver ) 示例如下
Create #tmp / 定义临时表 /
(字段
字段
)
Insert into #tmp select from TOTAL where
条件 / TOTAL中 万行 符合条件只有几十行 /
Declare Mycursor cursor for select from #tmp
/对临时表定义游标/
索引(Index)的使用原则
创建索引一般有以下两个目的 维护被索引列的唯一性和提供快速访问表中数据的策略 大型数据库有两种索引即簇索引和非簇索引 一个没有簇索引的表是按堆结构存储数据 所有的数据均添加在表的尾部 而建立了簇索引的表 其数据在物理上会按照簇索引键的顺序存储 一个表只允许有一个簇索引 因此 根据B树结构 可以理解添加任何一种索引均能提高按索引列查询的速度 但会降低插入 更新 删除 *** 作的性能 尤其是当填充因子(Fill Factor)较大时 所以对索引较多的表进行频繁的插入 更新 删除 *** 作 建表和索引时因设置较小的填充因子 以便在各数据页中留下较多的自由空间 减少页分割及重新组织的工作
数据的一致性和完整性
为了保证数据库的一致性和完整性 设计人员往往会设计过多的表间关联(Relation) 尽可能的降低数据的冗余 表间关联是一种强制性措施 建立后 对父表(Parent Table)和子表(Child Table)的插入 更新 删除 *** 作均要占用系统的开销 另外 最好不要用Identify 属性字段作为主键与子表关联 如果数据冗余低 数据的完整性容易得到保证 但增加了表间连接查询的 *** 作 为了提高系统的响应时间 合理的数据冗余也是必要的 使用规则(Rule)和约束(Check)来防止系统 *** 作人员误输入造成数据的错误是设计人员的另一种常用手段 但是 不必要的规则和约束也会占用系统的不必要开销 需要注意的是 约束对数据的有效性验证要比规则快 所有这些 设计人员在设计阶段应根据系统 *** 作的类型 频度加以均衡考虑
事务的陷阱
事务是在一次性完成的一组 *** 作 虽然这些 *** 作是单个的 *** 作 SQL Server能够保证这组 *** 作要么全部都完成 要么一点都不做 正是大型数据库的这一特性 使得数据的完整性得到了极大的保证
众所周知 SQL Server为每个独立的SQL语句都提供了隐含的事务控制 使得每个DML的数据 *** 作得以完整提交或回滚 但是SQL Server还提供了显式事务控制语句
BEGIN TRANSACTION 开始一个事务
MIT TRANSACTION 提交一个事务
ROLLBACK TRANSACTION 回滚一个事务
事务可以嵌套 可以通过全局变量@@trancount检索到连接的事务处理嵌套层次 需要加以特别注意并且极容易使编程人员犯错误的是 每个显示或隐含的事物开始都使得该变量加 每个事务的提交使该变量减 每个事务的回滚都会使得该变量置 而只有当该变量为 时的事务提交(最后一个提交语句时) 这时才把物理数据写入磁盘
数据库性能调整
在计算机硬件配置和网络设计确定的情况下 影响到应用系统性能的因素不外乎为数据库性能和客户端程序设计 而大多数数据库设计员采用两步法进行数据库设计 首先进行逻辑设计 而后进行物理设计 数据库逻辑设计去除了所有冗余数据 提高了数据吞吐速度 保证了数据的完整性 清楚地表达数据元素之间的关系 而对于多表之间的关联查询(尤其是大数据表)时 其性能将会降低 同时也提高了客 户端程序的编程难度 因此 物理设计需折衷考虑 根据业务规则 确定对关联表的数据量大小 数据项的访问频度 对此类数据表频繁的关联查询应适当提高数据冗余设计
数据类型的选择
数据类型的合理选择对于数据库的性能和 *** 作具有很大的影响 有关这方面的书籍也有不少的阐述 这里主要介绍几点经验
Identify字段不要作为表的主键与其它表关联 这将会影响到该表的数据迁移
Text 和Image字段属指针型数据 主要用来存放二进制大型对象(BLOB) 这类数据的 *** 作相比其它数据类型较慢 因此要避开使用
日期型字段的优点是有众多的日期函数支持 因此 在日期的大小比较 加减 *** 作上非常简单 但是 在按照日期作为条件的查询 *** 作也要用函数 相比其它数据类型速度上就慢许多 因为用函数作为查询的条件时 服务器无法用先进的性能策略来优化查询而只能进行表扫描遍历每行
例如 要从DATA_TAB 中(其中有一个名为DATE的日期字段)查询 年的所有记录
lishixinzhi/Article/program/Oracle/201311/17929
尽量不要使用 or 使用or会引起全表扫描 将大大降低查询效率
alice like % &abigale& % 会使索引不起作用(针对sqlserver)
经过实践验证 charindex()并不比前面加%的like更能提高查询效率 并且charindex()会使索引失去作用(指sqlserver数据库)
字段提取要按照 需多少 提多少 的原则 避免 select 尽量使用 select 字段 字段 字段 实践证明 每少提取一个字段 数据的提取速度就会有相应的提升 提升的速度还要看您舍弃的字段的大小来判断
order by按聚集索引列排序效率最高 一个sqlserver数据表只能建立一个聚集索引 一般默认为ID 也可以改为其它的字段
能使用exists和not exists尽量使用 避免使用in或not in
能使用表连接尽量使用 避免使用exists和not exists
SET NOCOUNT ON
正确使用UNION和UNION ALL
慎用SELECT DISTINCT
少用游标
使用表的别名(Alias)
当在SQL语句中连接多个表时 请使用表的别名并把别名前缀于每个Column上 这样可以减少解析的时间并减少那些由Column歧义引起的语法错误
尽量少使用游标
原因很简单;就是游标的算法是最原始的计算机算法(和for if等语句一样 一条条搜索来算;效率极低);
而sql语句用的是集合运算;速度则快的多;如果用索引速度则很快(用了指针)
创建索引
a 聚集索引:
聚集索引是磁盘存储和逻辑显示是一样的
mssql表的主键一般是聚集索引;主键(每一条记录唯一确定);
创建的主键自动会是聚集索引;
如有一个非常大的表(有百万行);很长时间磁盘存储上会有类似碎片(磁盘填充率效率低;一般是频繁删除造成的);
要提高它的性能的最简洁办法是:把这个表的主键去掉再保存后;然后重新设主键再保存;
(这个表就会在磁盘上重新整理排序;性能当然会提高哟)
b 非聚集索引:
非聚集索引是在外面建立小的附加表(一种树形结构;大多数是B或B+树);
读(遍历select等sql语句)表特快;但写(update;delete insert等sql语句)表性能会略微下降
针对数据量大的表建议非聚集索引不要超过 个(节省额外磁盘负担)
不要给类似 性别 列创建索引
死锁:
是指有线程在读一条记录;别的线程读这条记录就要等待;
在mssql中只要长期占那条记录的线程去掉;死锁就会解除
在mssql中锁是针对每一行记录(所以性能不错)
经常产生锁的原因有:
a 在sql语句中使用事务语句(特别是事务中当查询比较耗时)
b 在前台的应用程序的connetion冲突(未关闭)
c 多表联合查询(尤其是在打开大的数据集时)
sql语句优化
a is null not or in 不会用索引
b 避免在索引列上使用计算或函数处理(索引会大失性能) 还有 % ;有的甚至会全失索引性能
c SELECT中避免使用 (宁可把需要字段列出来;而不要用去把所有的字段都列出来)
d 避免相关子查询(select中套select)
e where的条件中 =>exists>in (指性能)
f order by group by having distinct 等语句要慎用(因为它们效率不高;它们是先把数据到临时表中再进行处理的)
g 聚集索引如有 个字段组成(tt 和tt );tt 在前面;where的条件中如只用tt 字段来判断;就会用到一半的聚集索引;
where的条件中如tt 和tt 字段都用来判断了;就会全用到聚集索引;
where的条件中如只用tt 字段来判断;就会用不到聚集索引了;
尽量不要使用TEXT数据类型
除非你使用TEXT处理一个很大的数据 否则不要使用它 因为它不易于查询 速度慢 用的不好还会浪费大量的空间
一般的 VARCHAR可以更好的处理你的数据
尽量不要使用临时表
尽量不要使用临时表 除非你必须这样做 一般使用子查询可以代替临时表 使用临时表会带来系统开销
如果前台的代码你是使用数据库连接池而临时表却自始至终都存在 SQL Server提供了一些替代方案 比如Table数据类型
尽量少使用外键和触发器
因为在mssql中这些功能的性能做得不是很好;随便动一下表(它就会到相关的表去搞判断;有很多情况并不需要);在后台消耗资源大
lishixinzhi/Article/program/Oracle/201311/16744
以上就是关于数据库管理系统的选择原则全部的内容,包括:数据库管理系统的选择原则、在系统实施中,数据库设计的原则、大型数据库设计原则等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)