数据库总结

第一章绪论

一、数据库系统概述

1. 数据库的4个基本概念

1.数据:数据库中存储的基本对象,描述事物的符号记录。

2.数据库:长期储存在计算机内、有组织的可共享的大量数据的集合。较小的冗余度、较高的数据独立性、易扩展性

3.数据库管理系统:位于用户与操作系统之间的一层数据管理软件。

数据定义功能,数据组织、存储和管理,数据操纵功能,数据库的事务管理和运行管理,数据库的建立和维护功能,其他功能

4.数据库系统:数据库、数据库管理系统、应用程序和数据库管理员。

好处:提高应用开发的效率,不必考虑数据管理的细节;数据与程序之间的独立性,只修改逻辑结构,不必修改应用程序;减轻管理人员维护系统的负担

2. 数据管理技术的产生和发展

1.人工管理阶段:无直接存取设备,没有操作系统,批处理,某一应用程序,无共享独立

2.文件系统阶段:磁盘、磁鼓,文件系统(是操作系统的一部分),联机实时处理、批处理,某一应用,共享独立差,临时数据

3.数据库系统阶段:独立于操作系统、现实世界,安全,完整,并发,恢复

二、数据模型

1.分类

概念模型

逻辑和物理模型:层次、网状、关系、面向对象数据、对象关系数据、半结构化数据

关系模型优点:

1.建立在严格的数学概念基础上;

2.概念单一,联系都用关系来表示。数据结构简单,清晰,用户易懂易用;

3.存取路径对用户透明,独立保密。

缺点:由于存取路径对用户透明,查询效率不如格式化数据模型。DBMS进行优化。

2. 组成要素

数据结构、数据操作、数据的完整性约束

3. 数据库系统的三级模式

模式:所有用户的公共数据视图;

外模式:用户模式,模式的子图;

内模式:存储模式,只有一个。

数据与程序的物理独立性:当数据库的存储结构改变,管理员对模式/内模式映像做相应改变,可以使模式保持不变,从而应用程序也不必改变。

数据与程序的逻辑独立性:当模式改变时,管理员对各个外模式/模式的映像做相应改变,可以使外模式保持不变。应用程序是依据数据的外模式编写的。

第二章关系数据库

一、关系数据结构及形式化定义

1.关系

域:具有相同数据类型的值的集合

关系:是笛卡尔积D1*D2*...*Dn的子集。候选码:唯一标识一个元组,选定其中一个为主码。候选码的诸属性为主属性,不包含在任何候选码中的属性为非主属性。

2.关系模式

型,对关系的描述。R(U,D,DOM,F)R为关系名,U为组成关系的属性名集合,D为U中属性所来自的域,DOM为属性向域的映像集合,F为属性间的依赖关系集合。关系是关系模式在某一时刻的状态或内容。关系模式是静态的、稳定的,而关系是动态的、随时间不断变化的。

二、关系操作

1. 基本操作

查询:select、project、join、divide、union、except、intersection、Cartesian Product

插入、删除、修改操作。

2. 关系数据语言的分类

关系代数语言:基本运算 并、差、笛卡尔积、投影、选择 (交、连接、除均可用5种基本运算来表达)

关系演算语言(元组、域)

具有关系代数和关系演算双重特点的语言

三、关系的完整性

1. 实体完整性

主属性不能取空

2. 参照完整性

外码与主码之间的引用规则。关系R在外码F上的值必须取空值,或者等于S中某个元组的主码值。

(在参照完整性中,外码属性值可以为空,它表示该属性的值尚未确定,但前提条件是该外码属性不是其所在参照关系的主属性。)

3.用户定义完整性

四、关系运算符

1.传统集合运算

并、差、交、笛卡尔积

2.专门的关系运算

选择、投影、连接(自然连接是一种特殊的等值连接)、除运算(给定关系R (X,Y) 和S (Y,Z),其中X,Y,Z为属性组。R中的Y与S中的Y可以有不同的属性名,但必须出自相同的域集。R与S的除运算得到一个新的关系P(X),P是R中满足下列条件的元组在X属性列上的投影:元组在X上分量值x的象集Yx包含S在Y上投影的集合。)

示例:至少用了供应商S1所供应的全部零件的工程项目代码

解释:有关系:R(x,y) S(y,z)

     R                 S

A   B   C     B   C  D

a1 b1 c2     b1 c2 d1

a1 b2 c3     b2 c1 d1

a1 b2 c1     b2 c3 d2

R÷S的结果为a1

x相当于A y 相当于B,C z相当于D

按照除运算规则规则,我们不必关注D

只需比较B,C当S关系中的B,C所有的组合(b1,c2)(b2,c3)(b2,c1)都出现在R关系中时,结果才为A

Yx:x在R中的象集,x = tr[X]

a1的象集为:{(b1,c2),(b2,c3),(b2,c1)}

a2的象集为:{(b3,c7),(b2,c3)}

a3的象集为:{(b4,c6)}

a4的象集为:{(b6,c6)}

S在(B,C)上的投影为{(b1,c2),(b2,c3),(b2,c1)}。

显然只有R的象集a1包含S在(B,C)属性组上的投影,所以R÷S={a1}。

除操作是同时从行和列角度进行运算

第三章 关系数据库标准语言SQL

一、SQL概述

1. SQL特点

(1)综合统一:SQL语言集数据定义语言DDL、数据操纵语言DML、数据控制语言DCL的功能于一体。在关系模型中实体和实体间的联系均用关系表示,这种数据结构的单一性带来了数据操作符的统一性,查找、插入、删除、更新等每一种操作都只需一种操作符,从而克服了非关系系统由于信息表示方式的多样性带来的操
作复杂性。
(2)高度非过程化:用SQL语言进行数据操作,只要提出“做什么”,而无需指明“怎么做”,因此无需了解存取路径、存取路径的选择以及SQL语句的操作过程。这有利于提高数据独立性。
(3)面向集合的操作方式:SQL语言采用集合操作方式,不仅操作对象和查找结果可以是元组的集合,而且插入、删除、更新操作的对象也可以是元组的集合。
(4)以同一种语法结构提供两种使用方式:SQL语言既是自含式语言,又是嵌入式语言。作为自含式语言,它能够独立地用于联机交互的使用方式;作为嵌入式语言,它能够嵌入到高级语言程序中,供程序员设计程序时使用。
(5)语言简捷,易学易用。

2. 基本概念

基本表:本身独立存在的表,一个关系对应一个基本表。一个或多个基本表对应一个存储文件,一个表可以带若干索引,索引也存放在存储文件中。

视图:虚表

二、数据定义

1.定义模式

模式嵌套定义的语句:
CREATE SCHEMA<模式名>AUTHORIZATION<用户名>[<表定义子句>|<视图定义子句>|<授权定义子句>]

删除模式语句:
DROP SCHEMA<模式名><CASCADE | RESTRICT>
其中CASCADE和RESTRICT两者必选其一。选择了CASCADE(级联),表示在删除模式的同时把该模式中所有的数据库对象全部删除;选择了RESTRICT(限制),表示如果该模式中已经定义了下属的数据库对象(如表、视图等),则拒绝该删除语句的执行。只有当该模式中没有任何下属的对象时才能执行DROP SCHEMA语句。

2. 索引的建立与删除

顺序文件上的索引、B+树索引、散列索引、位图索引

三、数据查询

1. 常用查询条件

1. 确定范围:BETWEEN AND, NOT BETWEEN AND

确定集合:IN, NOTIN

字符串匹配:LIKE, NOT LIKE (%任意长度,_单个字符,ESCAPE‘<换码字符>’,对通配符进行转义)

空值:ISNULL, ISNOTNULL

2. AND的优先级高于OR,ORDER BY默认为ASC

3. WHERE子句中不能用聚集函数作为条件表达式。

4. GROUP BY子句

对查询结果分组的目的是为了细化聚集函数的作用对象。分组后还要对组进行筛选,输出满足条件的组用HAVING。

2. 嵌套查询

1.带有IN谓词的子查询

2.带有比较运算符的子查询:父查询与子查询之间用比较运算符进行连接。当确切知道是单值时,可以用>、<、=等比较运算符。

3.带有ANY或ALL谓词的子查询:>ANY   =ALL

4. 带有EXISTS谓词的子查询:只产生逻辑真值“true”或逻辑假值“false”

3. 集合查询

UNION、INTERSECT、EXCEPT

4. 基于派生表的查询

子查询不仅可以出现在WHERE子句中,还可以出现在FROM子句中,这时子查询生成的临时派生表(derivedtable)成为主查询的查询对象。
如果子查询中没有聚集函数,派生表可以不指定属性列,子查询SELECT子句后面的列名为其默认属性。通过FROM子句生成派生表时,AS关键字可以省略,但必须为派生关系指定一个别名。而对于基本表,别名是可选择项。

四、数据更新

1. 插入数据

插入元组、插入子查询结果

2. 修改数据

UPDATE<表名> SET<列名>=<表达式> [WHERE<条件>];

3. 删除数据

删除表中的数据,不是关于表的定义。

五、空值的处理

1.空值的可能性

目前不知道;不应该有值;不便于填写。

2.空值的处理

空值的产生,判断,约束条件,算术比较逻辑运算

六、视图

1. 定义查询更新

定义视图:CREATE VIEW  2.删除视图:DROP VIEW

2. 视图的作用

(1)视图能够简化用户的操作。
(2)视图使用户能以多种角度看待同一数据。
(3)视图对重构数据库提供了一定程度的逻辑独立性。
(4)视图能够对机密数据提供安全保护。
(5)适当的利用视图可以更清晰的表达查询。

第四章 数据安全性

一、数据库安全性综述

1.数据库不安全因素

(1)非授权用户对数据库的恶意存取和破坏

(2)数据库中重要或敏感的数据被泄露

(3)安全环境的脆弱性数据库的安全性与计算机系统的安全性

2.安全标准发展

TCSEC/TDI:A1、B3、B2、B1、C2、C1、D

二、数据库安全性控制

1. 用户身份鉴别

用户标识,身份鉴别常用方法:

(1)静态口令鉴别

(2)动态口令鉴别:一次一密

(3)生物特征鉴别:图像处理和模式识别

(4)智能卡鉴别:硬件加密

2.存取控制

确保只授权给有资格的用户

(1)DBMS的安全子系统

1.定义用户权限,并将用户权限登记到数据字典中

2.合法权限检查

(2)DAC和MAC

3.自主存取控制方法

GRANT和REVOKE。用户权限是由两个要素组成的:数据库对象和操作类型。

1.GRANT:GRANT权限 ON对象类型 对象名 TO用户[WITH GRANT OPTION] (能传播该权限)

2.REVOKE:REVOKE权限 ON对象类型对象名 FROM用户[CASCADE|RESTRICT]

4.强制存取控制方法

(1)MAC中的主客体

主体:活动实体,实际用户,代表用户的各进程。主体的敏感度标记称为许可证级别。

客体:被动实体,受主体操纵,包括文件、基本表、索引、视图等。客体的敏感度标记称为密级。

MAC机制就是通过对比主体的label和客体的label,最终确定主体是否能够存取客体。

(2)存取规则

当某一用户(或某一主体)以标记label注册入系统时,系统要求他对任何客体的存取必须遵循如下规则:

1.仅当主体的许可证级别大于或等于客体的密级时,该主体才能读取相应的客体。

2.仅当主体的许可证级别等于客体的密级时,该主体才能写相应的客体。

MAC与DAC的联系

系统首先进行DAC(C2)检查,对通过DAC检查的允许存取的数据库对象再由系统自动进行MAC(B1)检查,只有通过MAC检查的数据库对象方可存取。

三、视图机制

根据不同的用户定义不同的视图,把数据对象限制在一定的范围内,通过视图机制把要保密的数据对无权存取的用户隐藏起来,从而自动地对数据提供一定程度的安全保护。
视图机制间接地实现支持存取谓词的用户权限定义。

四、审计

审计功能把用户对数据库的所有操作自动记录下来放入审计日志(audit log)中。审计员可以利用审计日志监控数据库中的各种行为,重现导致数据库现有状况的一系列事件,找出非法存取数据的人、时间和内容等。

审计事件:服务器事件、系统权限、语句事件、模式对象事件

分类:用户级审计、系统级审计

五、数据加密

分类:存储加密(透明和非透明)、传输加密(链路加密、端到端加密)

六、其他安全性保护

1.隐蔽信道
隐蔽信道(covert channal)处理内容是强制存取控制未解决的问题。
2.数据隐私保护
数据隐私是控制不愿被他人知道或他人不便知道的个人数据的能力。数据隐私范围很广,涉及数据管理中的数据收集、数据存储、数据处理和数据发布等各个阶段。

问题一:试述实现数据库安全性控制的常用方法和技术。

答:实现数据库安全性控制的常用方法和技术有:
(1)用户标识和鉴别:该方法由系统提供一定的方式让用户标识自己的名字或身份。每次用户要求进入系统时,由系统进行核对,通过鉴定后才提供系统的使用权。
(2)存取控制:通过用户权限定义和合法权检查确保只有合法权限的用户访问数据库,所有未被授权的人员无法存取数据。
(3)视图机制:为不同的用户定义不同的视图,通过视图机制把要保密的数据对无权存取的用户隐藏起来,从而自动地对数据提供一定程度的安全保护。
(4)审计:建立审计日志,把用户对数据库的所有操作自动记录下来放入审计日志中,DBA可以利用审计跟踪的信息,重现导致数据库现有状况的一系列事件,找出非法存取数据的人、时间和内容等。
(5)数据加密:对存储和传输的数据进行加密处理,从而使得不知道解密算法的人无法获知数据的内容。

问题二:什么是数据库中的自主存取控制方法和强制存取控制方法?

答:(1)自主存取控制方法:定义各个用户对不同数据对象的存取权限。当用户对数据库访问时首先检查
用户的存取权限,防止不合法用户对数据库的存取。
(2)强制存取控制方法:每一个数据对象被强制地标以一定的密级,每一个用户也被强制地授予某一个级
别的许可证。系统规定只有具有某一许可证级别的用户才能存取某一个密级的数据对象。

第五章 数据库完整性

一、概述

数据库的完整性是指数据的正确性和相容性。

二、实体完整性

1.定义

定义主码,表级约束和列级约束。

2.检查和违约处理

(1)实体完整性规则

检查主码值是否唯一,如果不唯一则拒绝插入或修改。

检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改。

完整性约束条件分为六类:静态列级约束、静态元组约束、静态关系约束、动态列级约束、动态元组约束、动态关系约束。

(2)检查方法

1.全表扫描:依次判断表中每一条记录的主码值与将插入记录的主码值是否相同

2.在主码上自动建立一个B+树索引:通过索引查找基本表中是否已经存在新的主码值

三、参照完整性

1.定义

FOREIGN KEY     REFERENCES

2.参照完整性检查和违约处理

(1)拒绝执行(NO ACTION)(2)级联(CASCADE)(3)设置为空值

四、用户定义的完整性

1.属性上的约束条件

定义属性上的约束条件,即属性值限制。

列值非空(NOT NULL)列值唯一(UNIQUE)是否满足一个布尔表达式(CHECK)

2.元祖上的约束条件

元组级的限制可以设置不同属性之间的取值的相互约束条件。

五、完整性约束命名子句

CONSTRAINT

1.完整性约束命名子句

CONSTRAINT<完整性约束条件名>[PRIMARY KEY短语|FOREIGN KEY短语|CHECK短语]

2.修改表中的完整性限制
使用ALTER TABLE语句可以修改表中的完整性限制,先删除原来的约束条件,再增加新的约束条件。

六、域中的完整性限制

CREATE DOMAIN

七、断言

CREATE ASSERTION  DROP ASSERTION

通过声明性断言(declarative assertions)来指定更具一般性的约束。可以定义涉及多个表或聚集操作的比较复杂的完整性约束。断言创建以后,任何对断言中所涉及关系的操作都会触发关系数据库管理系统对断言的检查,任何使断言不为真值的操作都会被拒绝执行。

八、触发器

触发器(Trigger)是用户定义在关系表上的一类由事件驱动的特殊过程。一旦定义,任何用户对表的增删改操作均由服务器自动激活相应的触发器,在DBMS核心层进行集的完整性控制。触发器类似于约束,但是比约束更加灵活,可以实施比FOREIGN KEY束、CHECK约束更为复杂的检查和操作,具有更精细和更强大的数据控制能力。

第六章 关系数据理论

一、问题的提出

关系要符合一个最基本的条件:每一个分量必须是不可分的数据项。第一范式(1NF)

1.数据依赖

属性与属性之间的一种约束关系。属性间值是否相等体现出来的数据间的相关联系。

2.关系模式存在的问题

一个好的模式应当不会发生插入异常、删除异常、更新异常、数据冗余应尽可能少。

二、规范化

1.函数依赖

(1)定义:设R(U)是属性集u上的关系模式,X,Y是U的子集。若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称X函数确定Y或Y函数依赖于X,记作X→Y。

(2)

完全依赖:在R(U)中,如果X→Y,并且对于X的任何一个真子集X’,都有X’推不出Y,则称Y对X完全函数依赖。

部分依赖:若X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖。

传递依赖:在R(U)中,如果X-->Y, Y不包含于X,Y推不出X,Y-->Z,Z不包含Y,则称Z对X传递函数依赖。(Y推不出X,是因为如果Y-->X,是直接依赖而不是传递函数依赖)

2.码

(1)候选码:能确定U

(2)主码:选定一个候选码为主码。包含在任何一个候选码中的属性为主属性;不包含在任何候选码中的为非主属性。

(3)外码:关系模式R中属性或属性组X并非R的码,但X是另一个关系模式的码,则称X是R的外部码。

3.范式

5NF⊂4NF⊂BCNF⊂3NF⊂2NF⊂INF

一个低一级范式的关系模式通过模式分解(schema decomposition)可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化(normalization)。

4.2NF

每一个非主属性完全函数依赖于任何一个候选码。

一个关系模式R不属于2NF,就会严生以下几个问题:
(1)插入异常;
(2)删除异常;
(3)修改复杂。

5.3NF

定义:关系模式R<U,F>中若不存在这样的码x,属性组y及非主属性z(z∈y),使得x→y,y→z成立,y推不出x,则称R<U,F>∈3NF。
若R∈3NF,则每一个非主属性既不部分依赖于码也不传递依赖于码。

6.BCNF

关系模式R<U F>∈INF,若X→Y且Y推不出X时X必含有码,则R<U,F>∈BCNF。
即关系模式R<U,F>中,若每一个决定因素都包含码,则R<U,F>∈BCNF。
由BCNF的定义可以得到结论,一个满足BCNF的关系模式有:
① 所有非主属性对每一个码都是完全函数依赖。
② 所有的主属性对每一个不包含它的码,也是完全函数依赖。
③ 没有任何属性完全函数依赖于非码的任何一组属性。

举例:

(S,J)->T;(S,T)->J;T->J。(S,J),(S,T)都是候选键

STJ是3NF,因为没有任何非主属性对键传递依赖或部分依赖。但STJ不是BCNF关系,因为T是决定因素而T不是超键

7.多值依赖

(1)定义

设R(U)是属性集U上的一个关系模式。X,Y,Z是U的子集,并且Z=U-X-Y。关系模式R(U)中多值依赖X→→Y成立,当且仅当对R(U)的任一关系r,给定的一对(x,z)值,有一组r的值,这组值仅仅决定于x值而与z值无关。

(2)等价的形式化定义

在R(U)的任一关系r中,如果存在元组t、s使得t[X]=sIX],那么就必然存在元组w、v∈r(w、v可以与s、t相同),使得 w[x]=v[X]=t[X],而w[Y]=t[Y],w[Z]=s[Z],v[Y]=s[Y],v[Z]=t[Z](即交换s、t元组的y值所得的两个新元组必在r中),则Y多值依赖于X,记为X→→Y这里,X、Y是U的子集,Z=U-X-Y。

(3)性质
① 对称性。
② 传递性。
③ 函数依赖可以看作是多值依赖的特殊情况。
④ 若X→→Y,X→→Z,则X→→YZ。
⑤ 若X→→Y,X→→Z则X→→Y∩Z。
⑥ 菪X→→Y,X→→Z,则X→→Y-Z,X→→Z-Y。

(4)多值依赖和函数依赖的区别
① 多值依赖的有效性与属性集的范围有关。若X→→Y在U上成立,则在W(XY⊆W⊆U)上一定成立;反之则不然,即X→→Y在W(W⊂U)上成立,在U上并不一定成立。
② 若函数依赖X→Y在R(U)上成立,则对于任何Y′⊂Y均有X→Y′,成立。而多值依赖X→→Y若在R(U)上成立,却不能断言对于任何Y′⊂Y有X→→Y成立。

8.4NF

(1)定义
关系模式R<U,F>∈1NF,如果对于R的每个非平凡多值依赖X→→ y(Y∉X)都含有码,则称R<U,F>∈4NF。一个主码可以决定一组值。
(2)4NF与BCNF
4NF就是限制关系模式的属性之间不允许有非平凡且非函数依赖的多值依赖。如果一个关系模式是4NF,则必为BCNF。一个关系模式如果已达到了BCNF但不是4NF,这样的关系模式仍然具有不好的性质。可以用投影分解的方法消去非平凡且非函数依赖的多值依赖。
(3)函数依赖和多值依赖
函数依赖和多值依赖是两种最重要的数据依赖。如果只考虑函数依赖,则属于BCNF的关系模式规范化程度已经是最高的了。如果考虑多值依赖,则属于4NF的关系模式规范化程度是最高的。

三、数据依赖的公理系统

1.Armstrong公理系统

(1)定义
对于满足一组函数依赖F的关系模式R<U,F>,其任何一个关系r,若函数依赖X→Y,都成立(即r中任意两元组t、s,若t[X]=s[X],则t[Y]=s[Y]).则称F逻辑蕴涵X→Y.
(2)推理规则
① 自反律
若Y⊆X⊆U,则X→Y为F所蕴涵。
② 增广律
若X→Y为F所蕴涵,且Z⊆U,则XZ→YZ为F所蕴涵。
③ 传递律
(3)重要定义
① 在关系模式R<U,F>中为F所逻辑蕴涵的函数依赖的全体叫作F的闭包(closure),记为F+。人们把自反律、传递律和增广律称为Armstrong公理系统。
② 设F为属性集U 上的一组函数依赖,X、Y⊆U, 能由F根据Arrnstrong公理导出}, 称为属
性集X关于函数依赖集F的闭包。
③ 如果函数依赖集,满足下列条件,则称F为一个极小函数依赖集,亦称为最小依赖集或最小覆盖(minimal cover)。
a.F中任一函数依赖的右部仅含有一个属性;
b.F中不存在这样的函数依赖X→A,使得F与F-{X→A}等价;
c.F中不存在这样的函数依赖X→A,X有真子集2使得F-{X-A)U{Z→A}与F等价。


(4)引理
① X→A1A2…Ak成立的充分必要条件是X→Ai成立(i=1,2,…,k)。
② 设F为属性集u上的一组函数依赖,Y、Y⊆U,X→Y能由F根据Armstrong公理导出的充分必要条件是。
③ F+=G+的充分必要条件是F+⊆G+和G⊆F+。
(5)有效性和完备性
Armstrong公理系统是有效的、完备的。
① 有效性
有效性指的是由F出发根据Armstrong公理推导出来的每一个函数依赖一定在F+中。
② 完备性
完备性指的是F+中的每一个函数依赖,必定可以由F出发根据Armstrong公理推导出来。

 

四、模式的分解

关系模式R<U,F>的一个分解是指: ρ={R1<U1,F1>, R2<U2,F2>,…, Rk<Uk,Fk>}。

1.模式分解的3个定义

对于一个模式的分解是多种多样的,但是分解后产生的模式应与原模式等价。
对“等价”的概念有三种不同的定义:
(1)分解具有“无损连接性”;
(2)分解要“保持函数依赖”;
(3)分解既要“保持函数依赖”,又要具有“无损连接性”。
按照不同的分解准则,模式所能达到分离程度各不相同,各种范式就是对分离程度的测度。
2.分解的无损连接性和保持函数依赖性

无损分解

保持函数依赖


3.模式分解的算法
关于模式分解的几个重要事实是:
(1)若要求分解保持函数依赖,那么模式分离总可以达到3NF,但不一定能达到BCNF。
(2)若要求分解既保持函数依赖,又具有无损连接性,可以达到3NF,但不一定能达到BCNF。
(3)若要求分解具有无损连接性,那一定可达到4NF。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值