一、数据库表的设计原则

1、不应该针对整个系统进行数据库设计,而应该根据系统架构中的组件划分,针对每个组件所处理的业务进行组件单元的数据库设计;不同组件间所对应的数据库表之间的关联应尽可能减少,如果不同组件间的表需要外键关联也尽量不要创建外键关联,而只是记录关联表的一个主键,确保组件对应的表之间的独立性,为系统或表结构的重构提供可能性。

2、采用领域模型驱动的方式和自顶向下的思路进行数据库设计,首先分析系统业务,根据职责定义对象。对象要符合封装的特性,确保与职责相关的数据项被定义在一个对象之内,这些数据项能够完整描述该职责,不会出现职责描述缺失。并且一个对象有且只有一项职责,如果一个对象要负责两个或两个以上的职责,应进行分拆。

3、根据建立的领域模型进行数据库表的映射,此时应参考数据库设计第二范式:一个表中的所有非关键字属性都依赖于整个关键字。关键字可以是一个属性,也可以是多个属性的集合,不论何种方式,都应确保关键字能够保证唯一性。在确定关键字时,应保证关键字不会参与业务且不会出现更新异常,最优解决方案为采用一个自增数值型属性或一个随机字符串作为表的关键字。

4、由于第一点所述的领域模型驱动的方式设计数据库表结构,领域模型中的每一个对象只有一项职责,所以对象中的数据项不存在传递依赖,所以,这种思路的数据库表结构设计从一开始即满足第三范式:一个表应满足第二范式,且属性间不存在传递依赖。

5、同样,由于对象职责的单一性以及对象之间的关系反映的是业务逻辑之间的关系,所以在领域模型中的对象存在主对象和从对象之分,从对象是从1-N或N-N的角度进一步主对象的业务逻辑,所以从对象及对象关系映射为的表及表关联关系不存在删除和插入异常。

6、在映射后得出的数据库表结构中,应再根据第四范式进行进一步修改,确保不存在多值依赖。这时,应根据反向工程的思路反馈给领域模型。如果表结构中存在多值依赖,则证明领域模型中的对象具有至少两个以上的职责,应根据第一条进行设计修正。第四范式:一个表如果满足BCNF,不应存在多值依赖。

7、在经过分析后确认所有的表都满足二、三、四范式的情况下,表和表之间的关联尽量采用弱关联以便于对表字段和表结构的调整和重构。并且,数据库中的表是用来持久化一个对象实例在特定时间及特定条件下的状态的,只是一个存储介质,所以,表和表之间也不应用强关联来表述业务(数据间的一致性),这一职责应由系统的逻辑层来保证,这种方式也确保了系统对于不正确数据(脏数据)的兼容性。当然,从整个系统的角度来说我们还是要尽最大努力确保系统不会产生脏数据,单从另一个角度来说,脏数据的产生在一定程度上也是不可避免的,我们也要保证系统对这种情况的容错性。这是一个折中的方案。

8、应针对所有表的主键和外键建立索引,有针对性的(针对一些大数据量和常用检索方式)建立组合属性的索引,提高检索效率。虽然建立索引会消耗部分系统资源,但比较起在检索时搜索整张表中的数据尤其时表中的数据量较大时所带来的性能影响,以及无索引时的排序操作所带来的性能影响,这种方式仍然是值得提倡的。

9、尽量少采用存储过程,目前已经有很多技术可以替代存储过程的功能如“对象/关系映射”等,将数据一致性的保证放在数据库中,无论对于版本控制、开发和部署、以及数据库的迁移都会带来很大的影响。但不可否认,存储过程具有性能上的优势,所以,当系统可使用的硬件不会得到提升而性能又是非常重要的质量属性时,可经过平衡考虑选用存储过程。

10、当处理表间的关联约束所付出的代价(常常是使用性上的代价)超过了保证不会出现修改、删除、更改异常所付出的代价,并且数据冗余也不是主要的问题时,表设计可以不符合四个范式。四个范式确保了不会出现异常,但也可能由此导致过于纯洁的设计,使得表结构难于使用,所以在设计时需要进行综合判断,但首先确保符合四个范式,然后再进行精化修正是刚刚进入数据库设计领域时可以采用的最好办法。

11、设计出的表要具有较好的使用性,主要体现在查询时是否需要关联多张表且还需使用复杂的SQL技巧。

12、设计出的表要尽可能减少数据冗余,确保数据的准确性,有效的控制冗余有助于提高数据库的性能。

二、数据库设计范式

1规范化实体和属性(去除冗余)

1NF:每个属性都只应表示一个单一的值,而非多个值。

A、属性是原子性的

需要考虑熟悉是否分解的足够彻底,使得每个属性都表示一个单一的值。分解原则为——当需要分开处理每个部分时才分解值,并且分解到足够用就行。(即使当前不需要彻底分解属性,也应该考虑未来可能的需求变更。)

B、属性的所有实例必须包含相同数量的值

实体有固定数量的属性(表有固定数量的列)。设计实体时,要让每个属性只有固定数量的值与其相关联。

C、实体中出现的所有实体类型都必须不同

当前设计不符合1NF:

A、包含分隔符类字符的字符串数据。

B、名字尾端有数字的属性。

C、没有定义键或键定义不好的表。

2、属性间的关系(去除冗余)

2NF-实体必须符合1NF,每个属性描述的东西都必须针对整个键。

当前设计不符合2NF:

A、重复的键属性名字前缀(设计之外的数据冗余) 表明这些值可能描述了某些额外的实体。

B、有重复的数据组(设计之外的数据冗余) 这标志着属性间有函数依赖型。

C、没有外键的复合主键 这标志着键中的键值可能标识了多种事物,而不是一种事物。

3NF-实体必须符合2NF,非键属性不能描述其他非键属性。(与2NF不同,3NF处理的是非键属性和非键属性之间的关系,而不是和键属性之间的关系。

当前设计不符合3NF:

A、多个属性有同样的前缀。

B、重复的数据组。

C、汇总的数据,所引用的数据在一个完全不同的实体中。(有些人倾向于使用视图,我更倾向于使用对象集合,即由程序来完成。)

BCNF-实体满足第一范式,所有属性完全依赖于某个键,如果所有的判定都是一个键,则实体满足BCNF。(BCNF简单地扩展了以前的范式,它说的是:一个实体可能有若干个键,所有属性都必须依赖于这些键中的一个,也可以理解为“每个键必须唯一标识实体,每个非键熟悉必须描述实体。”

3、去除实体组合键中的冗余

4NF-实体必须满足BCNF,在一个属性与实体的键之间,多值依赖(一条记录在整个表的唯一性由多个值组合起来决定的)不能超过一个。

当前设计不符合4NF:

A、三元关系(实体:实体:实体)。

B、潜伏的多值属性。(如多个手机号。)

C、临时数据或历史值。(需要将历史数据的主体提出,否则将存在大量冗余。)

4、尽量将所有关系分解为二元关系 

5NF-实体必须满足4NF,当分解的信息无损的时候,确保所有关系都被分解为二元关系。

5NF保证在第四范式中存在的任何可以分解为实体的三元关系都被分解。有的三元关系可以在不丢失信息的前提下被分解为二元关系,当分解为两个二元关系的过程要丢失信息时,关系被宣称为处于第四范式中。所以,第五范式建议是,最好把现有的三元关系都分解为3个二元关系。

需要注意的是,规范化的结果可能是更多的表,更复杂的查询。因此,处理到何种程度,取决于性能和数据架构的多方考量。建议规范化到第四范式,原因是5NF的判断太过隐晦。例如:表X(老师,学生,课程)是一个三元关系,可以分解为表A(老师,学生),表B(学生,课程),表C(老师,课程)。表X表示某个老师是上某个学生的某个课程的老师;表A表示老师教学生;表B表示学生上课;表C表示老师教课。单独看是无法发现问题的,但是从数据出发,"表X=表A+表B+表C"并不一定成立,即不能通过连接构建分解前的数据。因为可能有多种组合,丧失了表X反馈出的业务规则。这种现象,容易在设计阶段被忽略,但好在在开放阶段会被显现,而且并不经常发生。

推荐做法:

A、尽可能地遵守上述规范化原则。

B、所有属性描述的都应该是体现被建模实体的本质的内容。

C、至少必须有一个键,它唯一地标识和描述了所建实体的本质。

D、主键要谨慎选择。

E、在逻辑阶段能做多少规范化就做多少(性能不是逻辑阶段考虑的范畴)。

三、数据库设计原则

1、原始单据与实体之间的关系 

可以是一对一、一对多、多对多的关系。在一般情况下,是一对一的关系:即一张原始单据对应且只对应一个实体。 在特殊情况下,可能是一对多或多对一的关系,即一张原始单证对应多个实体,或多张原始单证对应一个实体。 
实体可以理解为基本表。

【实例】:一份员工履历资料,在人力资源信息系统中,就对应三个基本表:员工基本情况表、社会关系表、工作简历表。 
这就是“一张原始单证对应多个实体”的典型例子。

描述1:1关系最少需要1张表。

描述1:n关系最少需要2张表。

描述n:n关系最少需要3张表。

2、主键与外键 

一般而言,一个实体不能既无主键又无外键。在E-R 图中,处于叶子部位的实体,可以定义主键,也可以不定义主键 ,但必须要有外键(因为它有父亲)。

主键与外键的设计,在全局数据库的设计中,占有重要地位。主键是实体的高度抽象,主键与外键的配对,表示实体之间的连接。

3、基本表的性质 

基本表与中间表、临时表不同,具有如下四个特性: 
(1) 原子性。基本表中的字段是不可再分解的。 
(2) 原始性。基本表中的记录是原始数据(基础数据)的记录。 
(3) 演绎性。由基本表与代码表中的数据,可以派生出所有的输出数据。 
(4) 稳定性。基本表的结构是相对稳定的,表中的记录是要长期保存的。 
  理解基本表的性质后,在设计数据库时,就能将基本表与中间表、临时表区分开来。

4、范式标准 

基本表及其字段之间的关系, 应尽量满足第三范式。但是,满足第三范式的数据库设计,往往不是最好的设计。 
  为了提高数据库的运行效率,常常需要降低范式标准:适当增加冗余,达到以空间换时间的目的。

  〖例2〗:有一张存放商品的基本表,如表1所示。“金额”这个字段的存在,表明该表的设计不满足第三范式, 
  因为“金额”可以由“单价”乘以“数量”得到,说明“金额”是冗余字段。但是,增加“金额”这个冗余字段, 
  可以提高查询统计的速度,这就是以空间换时间的作法。 
  在Rose 2002中,规定列有两种类型:数据列和计算列。“金额”这样的列被称为“计算列”,而“单价”和 
“数量”这样的列被称为“数据列”。

  表1 商品表的表结构 
  商品名称 商品型号 单价 数量 金额 
  电视机 29吋 2,500 40 100,000

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维护,临时表由程序员自己用程序自动维护。

中间表是针对多对多关系的,就比如做公交查询系统。里面有两个表,分别是车站表、线路表。这里我们起个名字叫:t_busstation 、t_road,根据常识我们也知道,一个站有多个线路经过,而每个线路又有多个车站,怎么才能将两个表联系起来呢,如果是一对一,一对多,我们一个表,两个表就可以将他们实现了,但是多对多呢,这样我们就必须借助中间表用来连接两个表。一般中间表都是有一个本表的自增主键,还有另外两个表的主键。中间表是没有属性的因为它不是一个基本表。

在本次项目中,我们就要用到临时表,首先来看看什么是临时表吧。这是我从网上书上查到的。因为我们用的是MS SQL Server 2000数据库,而在这个数据库里是支持临时表的。

临时表:其实就是那些以#号开头为名字的数据表,它主要是用来存放临时数据的,当用户断开连接但没有出去临时表里的数据时,系统会自动把临时表里的数据清空。这里要说一点,临时表是放在系统数据库 tempdb中的,而不是当前数据库。

临时表总共是分两种:本地临时表和全局临时表。

(1)这里我们需要了解的就是,在数据库中本地临时表是以一个#开头的,这种临时表只对当前的数据库用户可见,而其他的用户是不可见的。当数据库实例断开后当然也就丢失了数据了,不管是显式清空还是系统回收。

(2)还有一个就是全局临时表。它是以“##”开头的,而且是对于所有的用户都是可见的,当你断开数据库实例连接时,只要还有别的系统项目在引用它,连着数据库,那么数据就存在,只有当别的系统也断开连接时,系统才会清除全局临时表的数据。

下面是建立临时表的语句:

本地临时表:

     create table #student(studentID int ,studentName nvarchar (40),classID int)

全局临时表:

     create table ##student(studentID int ,studentName nvarchar (40).classID int)      

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语言进行程序设计时,尽量采取优化算法。 
总之,要提高数据库的运行效率,必须从数据库系统级优化、数据库设计级优化、程序实现级优化三个层次上同时下功夫。

数据库设计(二)——数据库设计原则相关推荐

  1. java数据库编程(二) 数据库操作

    关于数据库的连接方法已在java 数据库编程(一)JDBC连接Sql Server数据库一文中为大家介绍,还没有链接数据库的小伙伴请先点击查看. 今天首先为大家介绍一下数据库的连接及操作的核心类与接口 ...

  2. C#增删改查操作Access数据库之二(数据库的增加)

    功能:添加四个TextBox控件,在这四个控件中分别输入要添加的ID,学号,姓名,年龄,性别信息,单击Insert按钮将数据添加到Access数据库中并通过datagridview显示添加后的数据库. ...

  3. mysql性能结构优化原理_MySQL性能管理及架构设计(二):数据库结构优化、高可用架构设计、数据库索引优化...

    一.数据库结构优化(非常重要) 1.1 数据库结构优化目的 1.减少数据冗余:(数据冗余是指在数据库中存在相同的数据,或者某些数据可以由其他数据计算得到),注意,尽量减少不代表完全避免数据冗余: 2. ...

  4. ef mysql 优化_MySQL性能管理及架构设计(二):数据库结构优化、高可用架构设计、数据库索引优化...

    一.数据库结构优化(非常重要) 1.1 数据库结构优化目的 1.减少数据冗余:(数据冗余是指在数据库中存在相同的数据,或者某些数据可以由其他数据计算得到),注意,尽量减少不代表完全避免数据冗余: 2. ...

  5. MySQL性能管理及架构设计(二):数据库结构优化、高可用架构设计、数据库索引优化...

    一.数据库结构优化(非常重要) 1.1 数据库结构优化目的 1.减少数据冗余:(数据冗余是指在数据库中存在相同的数据,或者某些数据可以由其他数据计算得到),注意,尽量减少不代表完全避免数据冗余: 2. ...

  6. 数据库设计注意事项和原则

    引言数据库设计是信息系统设计的基础,一个好的数据库设计在满足了软件需求之外,还要易维护.易扩充等等要求.当然,对专家们反复强调的数据的一致性.冗余性.访问效率等问题的解决,很大程度上取决于数据库设计者 ...

  7. 陈睿:架构设计之数据库拆分六大原则

    架构设计之数据库拆分原则 数据拆分前其实是要首先做准备工作的,然后才是开始数据拆分,我先讲拆分前需要做的事情: 第一步:采用分布式缓存redis.memcached等降低对数据库的读操作. 第二步:如 ...

  8. 前后端分离微服务管理系统项目实战SaaS-HRM项目(二)——数据库设计与前端框架

    文章目录 二.数据库设计与前端框架 1.多租户SaaS平台的数据库方案 <1>.多租户概述 <2>.需求分析 <3>.多租户的数据库方案分析 (1).独立数据库 ( ...

  9. MySQL数据库系列之数据库设计原则

    MySQL中数据库设计原则: 1.一般情况下,应该尽量使用可以正确存储数据的最小数据类型.数据类型不一样,存储的执行效率也不一样.最好使用适度的整型数据类型,例如int之类的数据,这样在做查询或者字段 ...

  10. mysql的数据结构设计原则,数据库设计的重要性与原则

    随着工作经验的积累,我日益感觉到,对一名程序员来说,拥有良好的数据库设计能力是很重要的,甚至是最重要的. 程序员界有一句著名的话 Talk is cheap, show me the code 把这句 ...

最新文章

  1. HDU2199(二分算法)
  2. 简单的java rpc_Java 简单的rpc 一
  3. webwork2.2.4+spring配制方式总结
  4. 检测IIS应用程序池对象 回收
  5. mysql generic安装_MySQL 5.6 Generic Binary安装与配置
  6. android 帐户管理,Android开发之帐户管理
  7. unitywebrequest本地加载_Unity AudioSource加载本地.mp3文件/UnityWebRequest
  8. keras:Sequential API 和 Function API
  9. 【转】微服务架构下分布式事务方案
  10. gentoo ffmpeg+mencoder快速搭建视频处理系统笔记
  11. css-阴影和超链接伪类
  12. 电脑安装python3.74_在Python3.74+PyCharm2020.1 x64中安装使用Kivy的详细教程
  13. nodejs mysql 返回值_带有Mysql数据库返回值的Nodejs
  14. java并发初探ConcurrentHashMap
  15. seafile私有网盘搭建
  16. 【Linux】解决Linux上解压jdk报错gzip: stdin: not in gzip format
  17. ubuntu下安装win7虚拟机总结
  18. 弹出登录框 您未被授权查看该页 的解决办法
  19. Web前端学习上----(案例实现)
  20. Java从入门到实战总结-4.2、数据库高级

热门文章

  1. orientdb 学习
  2. 当笔记本是无线连接网络时,如何正确配置virtualbox的上网问题
  3. AMAX 深度学习服务器重装系统
  4. 华为AC6005基础调试步骤
  5. SpringMVC如何工作的?
  6. 2006年100首好歌
  7. 解决zeal文档下载不上的办法
  8. 教程:建立自己的私有云存储
  9. 我接触过的广东美食——流口水
  10. 抖音seo企业号,矩阵同步分发,抖音搜索框SEO优化系统搭建。