BCNF范式(修正的第三范式)、第四范式和第五范式

BCNF 范式详解 如果存在以下函数依赖:A -> B,B -> C,那么 B 和 C 就是部分依赖于主键 A,关系 R 不满足 BCNF。BCNF 全称为 Boycee Codd Normal Form,中文叫巴斯范式,是由 Boyce 和 Codd 提出的,比3NF又进了一步,通常认为是修正的第三范式。然而,在实际应用中,并非所有的关系都需要满足 BCNF,有时候可能会根据具体情况进行适当的权衡和调整。1. 所有的函数依赖都是完全函数依赖:对于关系中的每个属性组,不存在一个属性可以由其他属性的子集唯一确定。 阅读详情
修正的第三范式(BCNF)

1. 定义

当下面性质成立时,一个数据库模式中的表T及函数依赖集F被称为符合Boyce-Codd范式(BCNF):任何F可推导出的函数依赖X->A都在T中,这里A是不在X中的单一属性,X必须是T的一个超键。当一个数据库模式包含的所有表都符合BCNF时,这个数据库被称为符合BCNF.

2. 说明

BCNF是比第三范式更严格一个范式。它要求关系模型中所有的属性(包括主属性和非主属性)都不传递依赖于任何候选关键字。也就是说,当关系型表中功能上互相依赖的那些列的每一列都是一个候选关键字时候,该满足BCNF。

BCNF实际上是在第三范式的基础上,进一步消除了主属性的传递依赖。

3. 举例

有这样一个配件管理表WPE(WNO,PNO,ENO,QNT),其中WNO表示仓库号,PNO表示配件号,ENO表示职工号,QNT表示数量。

有以下约束要求:

(1)       一个仓库有多名职工;

(2)       一个职工仅在一个仓库工作;

(3)       每个仓库里一种型号的配件由专人负责,但一个人可以管理几种配件;

(4)       同一种型号的配件可以分放在几个仓库中。

分析表中的函数依赖关系,可以得到:

(1)       ENO->WNO;

(2)       (WNO,PNO)->QNT

(3)       (WNO,PNO)->ENO

(4)       (ENO,PNO)->QNT

可以看到,候选键有:(ENO,PNO);(WNO,PNO)。所以,ENO,PNO,WNO均为主属性,QNT为非主属性。显然,非主属性是直接依赖于候选键的。所以此表满足第三范式。

而我们观察一下主属性:(WNO,PNO)->ENO;ENO->WNO。显然WNO对于候选键(WNO,PNO)存在传递依赖,所以不符合BCNF.

解决这个问题的办法是分拆为两个表:管理表EP(ENO,PNO,QNT);工作表EW(ENO,WNO)。但这样做会导致函数依赖(WNO,PNO)->ENO丢失。

4. 应用

虽然,不满足BCNF,也会导致一些冗余和一致性的问题。但是,将表分解成满足BCNF的表又可能丢失一些函数依赖。所以,一般情况下不会强制要求关系表要满足BCNF。

五.             第四范式(4NF)

1. 定义

第四范式需要满足以下要求:

(1)       必须满足第三范式

(2)       表中不能包含一个实体的两个或多个互相独立的多值因子。

2. 说明

     显然,第四范式也是一个比第三范式严格的范式。

     第四范式的意思是:当一个表中的非主属性互相独立时(3NF),这些非主属性不应该有多值。若有多值就违反了第四范式。定义比较抽象,可以参照下面的例子理解。

3. 举例

有这样一个用户联系方式表TELEPHONE(CUSTOMERID,PHONE,CELL)。 CUSTOMERID为用户ID,PHONE为用户的固定电话,CELL为用户的移动电话。

      本来,这是一个非常简单的第3范式表。主键为CUSTOMERID,不存在传递依赖。但在某些情况下,这样的表还是不合理的。比如说,用户有两个固定电话,两个移动电话。这时,表的具体表示如下:

CUSTOMERID

PHONE

CELL

1000

8828-1234

149088888888

1000

8838-1234

149099999999

      由于PHONE和CELL是互相独立的,而有些用户又有两个和多个值。这时此表就违反第四范式。

      在这种情况下,此表的设计就会带来很多维护上的麻烦。例如,如果用户放弃第一行的固定电话和第二行的移动电话,那么这两行会合并吗?等等

      解决问题的方法为,设计一个新表NEW_PHONE(CUSTOMERID,NUMBER,TYPE).这样就可以对每个用户处理不同类型的多个电话号码,而不会违反第四范式。

4. 应用

显然,第四范式的应用范围比较小,因为只有在某些特殊情况下,要考虑将表规范到第四范式。所以在实际应用中,一般不要求表满足第四范式。

六.             第五范式(5NF)

1. 定义

第五范式有以下要求:

(1)       必须满足第四范式

(2)       表必须可以分解为较小的表,除非那些表在逻辑上拥有与原始表相同的主键。

2. 说明

第五范式是在第四范式的基础上做的进一步规范化。

第四范式处理的是相互独立的多值情况,而第五范式则处理相互依赖的多值情况。

3. 举例

有一个销售信息表SALES(SALEPERSON,VENDOR,PRODUCT)。SALEPERSON代表销售人员,VENDOR代表供和商,PRODUCT则代表产品。

在某些情况下,这个表中会产生一些冗余。可以将表分解为PERSON_VENDOR表(SALEPERSON,VENDOR);PERSON_PRODUCT表(SALEPERSON,PRODUCT);VENDOR­_PRODICT表(VENDOR,PRODUCT)。

4. 应用

第五范式的应用就更少了,很多时候,我认为分解为第五范式是完全没必要的。可能在某些情况下会有意义吧。不懂。。。

总结:

   总之,规范化的过程就是在数据库表设计时移除数据冗余的过程。随着规范化的进行,数据冗余越来越少,但数据库的效率也越来越低。

   这就要求你在数据库设计中,能结合实际应用的性能要求,规范到合适的范式。一般情况下,如何性能允许的话,都要求规范到第三范式的。

===================================================

例子:STC(Sid,Tid,Cid) 学生选课m:n,老师授课m:1, 
有以下函数依赖:(Sid,Cid)->Tid;(Sid,Tid)->Cid;Tid->Cid 

这个表不符合BCNF但符合第三范式。 
改为:ST(Sid,Tid);TC(Tid,Cid)。现在就符合BCNF了。 

3NF->BCNF 需要消除主属性对键的部分和传递函数依赖。

最新版IAR9.40和注册工具 IAR最新版的IDE在编译速度和代码提示等各个方面上都有很大提升,软件这个东西果然还是越新越好。之前的时候,IAR v9系列网上很多人都说能用,但是又没有把 IAR v9系列的注册方法写的很清楚,导致我一直都用注册老版本v8的方法去注册v9。结果注册后都会提示。 阅读详情

相关推荐

告别版本冲突!在Ubuntu 20.04上优雅实现ROS Noetic与ROS2 Foxy双环境切换

本文详细介绍了在Ubuntu 20.04系统上实现ROS Noetic(ROS1)与ROS2 Foxy双环境共存与切换的完整方案。通过智能脚本设计和工作空间隔离,解决了版本冲突问题,帮助开发者高效管理不同ROS版本项目。特别适合需要同时开发ROS1和ROS2应用的机器人开发者。

weixin_28452161的博客 411

第一范式、第二范式、第三范式、BCNF范式详解

范式是“符合某一种级别的关系模式的集合,表示一个关系内部各属性之间的联系的合理化程度”。

WHEgqing的专栏 7万+

BeckHoff <--> ABB 机器手 Profinet 通讯

本文介绍了BeckHoff PLC与ABB机器人通过PROFINET通信的实现方案。主要内容包括:1)通信接口的详细变量定义,涵盖输入/输出信号、设备状态监控、夹爪控制等关键功能位;2)全局数据结构和变量配置说明;3)机器人任务控制程序的实现方法,包括参数校验、任务指令下发和状态监控机制;4)重点分析了任务调度功能块的代码逻辑,涉及慢速模式处理、多参数配置和执行状态判断。该方案通过结构化变量定义和模块化程序设计,实现了PLC对机器人作业的精确控制,为工业自动化系统集成提供了可靠通信范例。

工控智联驿站 1032

数据库的三大设计范式和BCNF

BCNF的目标是消除关系模式中的所有主属性之间的非平凡函数依赖,确保数据的完整性和一致性。遵循BCNF可以避免数据冗余和更新异常,提高数据库的性能和可维护性。

3476511424@qq.com的博客 6920

别再为UE5像素流部署踩坑了!Windows服务器单实例保姆级避坑指南(含Node.js证书、coturn空文件夹等常见问题解决)

本文提供了UE5像素流在Windows服务器单实例部署中的全面解决方案,涵盖Node.js证书过期、coturn空文件夹等常见问题。通过详细的步骤指导和配置建议,帮助开发者高效完成部署,避免常见陷阱,特别适合局域网环境下的应用场景。

weixin_30315435的博客 464

Matlab激活失败?手把手教你解决License checkout failed问题(附详细截图)

本文针对Matlab激活后出现“License checkout failed”错误的常见问题,提供了详细的解决方案。核心在于精准定位并正确填写Windows系统用户名,而非计算机名或账户全名。文章通过分步截图和命令指引,手把手教你使用`whoami`命令获取正确信息,并重新运行激活程序,从根本上解决因用户名填写错误导致的许可检查失败问题。

weixin_29062823的博客 572

第一范式、第二范式、第三范式、BCNF范式详解:函数依赖,完全,部分,传递,码,主和非主属性。

第一范式、第二范式、第三范式、BCNF范式详解:函数依赖,完全,部分,传递,码,主和非主属性。

qq120631157的博客 1万+

【OS】AUTOSAR OS系统调用产生Trap的过程详解

AUTOSAR OS系统调用产生Trap的过程详解

qq_36056498的博客 2438

数据库三范式和BCNF范式的理解:生动举例

通过生动形象的例子理解三大范式、BCNF范式以及反范式化,简单易懂。本文用生活中易于理解的概念,直观地描述这些范式和它们的应用场景,同时也给出了相应的实际数据库案例。

weixin_43954951的博客 4万+

二十一、CANdelaStudio深入-SPRMIB的配置

本专栏将由浅入深的展开诊断实际开发与测试的数据库编辑,包含大量实际开发过程中的步骤、使用技巧与少量对Autosar标准的解读。希望能对大家有所帮助,与大家共同成长,早日成为一名车载诊断、通信全栈工程师。 本文介绍CANdelaStudio的肯定响应抑制位配置,欢迎各位朋友订阅、评论,可以提出宝贵意见,以持续输出更好的作品,同时会根据评论、私信不定期更新文章内容,以及专栏目录。订阅该专栏的朋友可私信小编免费答疑解惑(^U^)ノ~YO CANdelaStudio-从入门到深入目录 文章目录CANdelaStu

诊断协议那些事儿's blog 1869

如何解决群晖Docker注册表查询失败/无法拉取镜像等问题

如何解决群晖Docker注册表查询失败/无法拉取镜像等问题

XiaoqiangClub的博客 1万+

第一范式,第二范式,第三范式,BCNF范式理解

第一范式、第二范式、第三范式 参考了https://www.zhihu.com/question/24696366 https://www.cnblogs.com/lca1826/p/6601395.html 基础知识 实体:现实世界中客观存在并可以被区别的事物。比如“一个学生”、“一本书”、“一门课”等等。值得强调的是这里所说的“事物”不仅仅是看得见摸得着的“东西”,它也...

萝卜头 19万+

【WRFDA第三期】OBSPROC namelist 变量总结

OBSPROC namelist 变量总结

WW、forever的博客 1120

BCNF和第三范式的分解算法

范式概念 对于数据库的范式概念我们是经常会用到的,临近期末考试,我自己总结了一下,要不然总是一下子就忘记了。 第一范式:如果一个关系模式R的每个元素都是不可分割即原子的单元,则称这个范式是第一范式。 BCNF:对于关系模式R的函数依赖集,每个依赖都必须符合下面两个至少有一项成立: 1,a——>b是平凡的函数依赖,即b属于a。 2,a——>b,其中a是关系模式R的一个超码。 这里我们对B...

weixin_44959377的博客 1万+

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

数据库的第一范式,第二范式,第三范式,BCNF范式理解

第一范式 属性的原子性 所谓的第一范式就是数据库中的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性,如果出现重复的属性则需要重新构建实体,新的实体由重复的属性构成。 见图 分析图: 在进货和销售中 有两个重复的属性(数量和单价),并且进价和销售是可以再分割的,不满足原子性,即不满足第一范式,可以修改为下面的两个实体 第二范式 属性完...

sofency'Blog 6万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

BCNF范式(匡正的第三范式)、第四范式和第五范式

BCNF范式(修正的第三范式)、第四范式和第五范式 修正的第三范式(BCNF) 1.定义 当下面性质成立时,一个数据库模式中的表T及函数依赖集F被称为符合Boyce-Codd范式(BCNF):任何F可推导出的函数依赖X->A都在T中,这里A是不在X中的单一属性,X必须是T的一个超键。当一个数据库模式包含的所有表都符合BCNF时,这个数据库被称为符合BCNF. 2.说

moyanmalin的博客 2729

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

从第一范式到BCNF

在数据库设计中,范式是一种规范,用于确保数据库表结构的合理性和数据的完整性。 在这篇博客中,我们将深入探讨数据库的五大范式,从第一范式到BCNF,以及它们在实际应用中的意义和作用。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 6636

数据库三大范式、BC范式、第四范式

为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。

Sankkl1的博客 9877

尴尬的第四范式 第五范式

《秒懂数据库范式》 先准备几个概念防止后面对范式的理解不清晰。 元组:表中的一行就是一个元组。 候选码和主码:表中可以唯一确定一个元组的某个属性(或者属性组)叫候选码。 主码:我们从许多个候选码中挑一个就叫主码。(主键) 属性:教科书上解释为:“实体所具有的某一特性”,在关系数据库中,属性又是个物理概念,属性可以看作是“表的一列”。 主属性:一个属性只要在任何一个候选码中出现过,这个属性就是主...

xie__jin__cheng的博客 9458

关系模式的第四范式、第五范式(关系型数据库理论)

该算法是经过严格证明的有效的,可以上面图中的方案为例进行测试。同样,由于不保证得到的分解是。(fourth normal form,4NF)的。所以 4NF 是在 3NF 的基础上进一步剔除了非平凡的严格多值依赖的情况。的基础上,再进行以下操作便可实现 4NF(继续保持。(fifth normal form,5NF),也叫。(或说 4NF 不允许存在两个多值依赖)。显然该定义是 3NF 的进一步收紧,由于。,那么就称该关系方案是满足。

codeforeasier的博客 2379
上一篇: BCNF范式(修正的第三范式)、第四范式和第五范式
下一篇: Struts2核心工作原理解析
G_beginner
博客等级 码龄16年 45粉丝 34原创
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值