1. 支付管理系统开发的功能需求是什么
支付管理系统的功能性需求态携主要包括用户登录、数据的明细查询、查询结果生shx2成Excel文件、增添数据、文件数据批量入库、订单丢失扫描等;非功能闭薯性需求主要包括界面的布局设定、登录用户权限管理、防SQL注入、防命令帆态伏注入等。
按照用户需求,对该系统进行总体设计。通过公司的设计规范,对系统的运神华科技营平台、数据库以及前端界面布局等多个模块进行设计。完成设计之后,利用PHP语言代码与图片展示,详细的介绍了如何逐步实现系统的功能性需求与非功能性需求。
2. 毕业论文的大纲
你论文题目是什么啊?你应该把题目也打出来啊。这样才能看哪里不合适啊
3. 支付系统由什么组成
问题一:网上支付系统由哪些组成? 网上支付系统含义
支付系统(Payment System)可以定义为由提供支付服务的中介机构、管理货币转移的法规以及实现支付的技术手段共同组成的,用来清偿经济活动参加者在获取实物资产或金融资产时所承担的债务的系统。因此,支付系统是重要的社会基础设施之一,是社会经济良好运行的基础和催化剂。
电子支付的体系构成
1、消费者:在网上选定商品,确认订单后进入电子支付环节。消费者需要拥有电子支付工具。
2、网上商城:电子支付的接受方。网上商城需要有各个银行的账号,网上商城可以搭建自己的支付平台,也可租用第三方支付平台,请同学说出有哪些专业的第三方支付平台。
3、消费者开户银行
4、商城收单银揣
5、银行专用网:银行之间进行通信和数据处理的专用网络。如中国国家金融通信网。
6、支付网关:公用互联网平台和银行专用网之间的安全接口。
7、CA认证中心:第三方公证机构,是电子商务市场的准入者和规范者,它的作用与工商局类似。
网上支付系统的功能:
1、实现对各方的认证;
2、对业务进行加密;
3、确认业务的完整性
4、保证业务的不可否认性;
5、处理贸易业务的多边支付问题。
问题二:网上支付系统由哪几个基本部分构成 电子支付的体系构成 1、消费者:在网上选定商品,确认订单后进入电子支付环节。消费者需要拥有电子支付工具。 2、网上商城:电子支付的接受方。网上商城需要有各个银行的账号,网上商城可以搭建自己的支付平台,也可租用第三方支付平台,请同学说出有哪些专业的第三方支付平台。 3、消费者开户银行 4、商城收单银行 5、银行专用网:银行之间进行通信和数据处理的专用网络。如中国国家金融通信网。 6、支付网关:公用互联网平台和银行专用网之间的安全接口。 7、CA认证中心:第三方公证机构,是电子商务市场的准入者和规范者,它的作用与工商局类似。丛滚慧 网上支付系统的功能: 1、实现对各方备举的认证; 2、对业务进行加密; 3、确认业务的完整性 4、保证业务的不可否认性; 5、处理贸易业务的多边支付问题。
问题三:支付系统是什么? 支付系统实际上也可以称作第三方支付系统,支付系统有自己的一套客户/账户/账务体系,用于记录各个客户/商户的基本信息、账户信息、账务信息。支付系统基本信息包括实名认证信息、联系方式等等信息。账户信息比较重要的属性是账户资金/余额,此处的账户资金实际上只是虚拟账户的资金信息,并非实际的资金,实际的资金存放在支付平台在银行设立的银行账户上。
支付系统工具(智付、微信、支付宝等等等)有电子钱包 ,在线支付,移动支付,跨境结算,电子收款,扫码支付,信用卡支付,转移支付,跨境结算等各种网上支付方式。简单说来,支付系统的账户体系实际上用于记录每一个客户/商户的账户资金等虚拟信息。
关于支付系统账户/账户体系,一般有单式记帐法、复式记账法,关于账户/账务系统的设计具体原理可以找一本《会计学原理》好好学习一下,琢磨清楚科目设置、账户、流水分录、账簿、复式记账法之类概念,再结合交易订单处理,基本上就可以做出一个简单的账户/账务系统。当然一般所说的账户/账务体系,实际上还涉及客户/商户模型,以满足“客户为中心”而非“账户为中心”的管理需求。
问题四:网上支付系统由哪几个基本部分构成? 这样的问题,我建议你问问老师或是其他能够理解的同学。这样才是真正的能够掌握的途径,可以一次性的‘会’,不如一直的‘会’
这样可以么?
问题五:一般的移动支付系统由什渗答么组成 翼海就是一个系统的第三方支付,安全稳健!
问题六:电子商务支付系统的组成元素有哪些? 不要被哪些编概念的SB弄糊涂了,国内的电子商务本身就是刚起步,当然,全世界也不见得说一件很成熟了,(任何一个成熟的商务模式都不可能长时间的存在爆发性发展,这和发展中国家和发达国家的区别一样,愈成熟愈趋于稳定)。在不成熟的状态下大家都在摸索,很多人就会乘这个机会倒卖概念。 实际上支付方式就那么几个,谈不上“模式”,第三方中介担保(支付宝、财付通)、直接付款(货到付款、转账汇款)、预付款(充值消费)。 电子支付模式可以应用到电子商务支付模式,但是不能转变。
问题七:电子支付系统的组成内容 电子支付系统是实现网上支付的基础.电子支付系统的发展方向是兼容多种支付工具,但目前的各种支付工具之间存在较大差异,分别有自己的特点和运作模式,适用于不同的交易过程.因此当前的多种电子支付系统通常只是针对某一种支付工具而设计的.Mondex系统、First Virtual系统和FSTC系统是目前使用的几种主要的电子支付系统。支付系统是指由提供支付服务的中介机构、管理货币转移的法规以及实现支付的技术手段共同组成的,用来清偿经济活动参加者在获取实物资产或金融资产时所承担债务的一种特定方式与安排。因此支付系统是重要的社会基础设施之一。各种不同的支付系统通常是与各种不同的经济相联系在一起的。经济社会曾经使用过各种形态的货币在商品交换中转移价值。从最初的实物交换发展到商品货币(例如贵金属)标志着社会生产力的进步。而法定货币的出现则是支付工具发展史上的第一次飞跃,银行存款作为支付手段是货币制度的一大进步。用电子形式的支付工具完全取代纸凭证形式的现金和非现金支付工具在技术上是完全可以实现的。人们把电子支付工具看成是支付工具发展史上第二次飞跃或革命。网上支付是电子支付系统的发展和创新。传统的银行结算支付指令的传递完全依靠面对面的手工处理和经过邮政、电信部门的委托传递,因而存在着结算成本高、凭证传递时间长、在途资金占压大、资金周转慢等问题。电子资金转账系统缩短了银行之间支付指令的传递时间,并减少了在途资金的占压。基于互联网的电子交易支付系统由客户、商家、认证中心、支付网关、客户银行、商家银行和金融专用网络七个部分组成。 指POSEFT和ATM系统,其支付工具为银行卡(信用卡、借记卡或ATM卡、电子现金等)。主要特点是金额小、业务量大,交易资金采用净额结算(但POSEFT和ATM中需要对支付实时授信)
问题八:什么是POS系统?它由哪些部分组成 ,
问题九:电子商务系统主要由哪几上部分组成 电子商务系统的基础平台一般包括以下组成部分 :
(1)负荷均衡 负荷均衡是指如何使电子商务系统服务器的处理能力和承受能力的压力保持均衡 。
负荷均衡还可以对服务器集群结构中的各个服务器性能进行动态调整和负荷分配。它使电子商务系统中硬件性能得到有效的均衡,避免特定的设备或系统软件由于压力过大而出现崩溃和拒绝服务的现象。这样在一定程度上能够提高系统的可靠性。
(2)连接/传输管理 这一部分的主要作用是满足系统可扩充性的需要,用以实现电子商务系统和其他系统之间的互联以及应用之间的互操作。
一般来讲,这一部分包括三个方面的内容: 异构系统的连接及通讯,例如UNIX系统上的WEB服务器与IBM ES9000之间的连接。
应用间的通信接口,保证应用程序通过不可靠信道连接进行时,可以完成差错恢复及续传,并为应用之间的互操作提供API接口,简化应用通信的开发工作。
应用和数据库的连接之间的接口。
(3)事务管理
电子商务系统支持的商务活动涉及到大量的联机事务处理OLTP和OLAP,这就要求系统具备很强的事务处理性能。事务管理的作用包括量方面,一是保证分布式环境下事务的完整性、一致性和原子性;二时缩短系统的响应时间,提高交易过程的实时性。
(4)网站管理 网站是电子商务系统的客户服务接口,用于表达系统商务逻辑的处理结果。所以,在电子商务系统中,网站具有重要的地位。
网站管理的基本作用是为站点维护、管理和性能分析提供技术支持手段,它主要实现系统状态的监控、系统性能调整、用户访问授权、客户访问历史记录等功能。
通过网站管理功能,可以记录客户的访问数据,了解用户的需求。利用这些数据,企业能够了解客户的潜在需求。
(5)数据管理 该部分为电子商务应用相关数据的存储、加工、备份和表达提供支持,同时为应用程序提供应用开发接口。
通常该部分利用支持WEB的数据库管理系统实现。但是与传统的DBMS相比,该部分与WEB的接口方式更加丰富,例如支持API、JDBC、ODBC等接口方式,而且对多媒体数据的支持能力更强。
除利用传统的DBMS实现数据管理外,目前也又一种做法是将WEB和DBMS更紧密的结合起来,构造所谓的WebDB。例如,在CA公司的产品Justme-I中,就将应用平台和数据库集成为一体。
(6)安全管理 该部分为电子商务系统提供安全可靠的运行环境、防止或减少系统被攻击的可能、提高系统抗拒非法入侵或攻击的能力、保障联机交易过程的安全。
问题十:人民币支付清算系统的主要构成 五百
4. 瑞吉外卖项目可以当毕设嘛
是的,瑞吉外卖项目可以作为毕设项目。瑞吉外卖是一个在线外卖订购平台,它可以为用户提供便捷的订餐服务,同时也能够为商家提供一个新的销售渠道。如果你选择这个项目作为毕设,你可以从以下几个方面进行研究:
1. 用户颂渗差需求分析:研究用户在使用外卖平台时的需求,包括订餐流程、支付方式、送餐时间等方面。
2. 技术实现:研究如何设计和开发一个在线外卖订购平台,包括前喊搭端界面设计、后台架构设计、数据库设计等方面。
3. 商家管理:研究如何为商家提供一个管理后台,让他们能够方便野皮地管理自己的餐厅信息、菜单和订单等信息。
4. 营销策略:研究如何制定一个有效的营销策略,吸引更多的用户和商家使用平台。
通过这些研究,你可以深入了解外卖行业的运作方式,掌握相关技术和管理知识,同时也能够提出创新的解决方案,为行业的发展做出贡献。
5. 高频交易支付架构并不复杂
支付系统是整个交易系统中相当核心的一部分功能,以我们的交易中台为例,通过领卜伍域方式的拆分,支付架构隶属于订单团队,在整个用户下单之后进行支付,支付之后成单进入交易履约流程。
支付系统由于本身和金融相关,不像其他高频系统面对海量请求可以大量使用缓存,异步mq等方式解决三高问题。支付系统对数据一致性要求更高,所以对于其架构设计原则还是有自己特点的。
构建一个支撑每秒十万只读系统并不复杂,无非是通过一致性哈希扩展缓存节点,水平扩展web服务器等。每秒钟数十万数据更新操作,在任何数据库上都是不可能的任务,首先需要对订单表进行分库分表。
在进行数据库操作时,一般会用ID(UID)字段,所以选择以UID进行分库分表。
分库策略我们选择了“二叉树分库”,所谓“二叉树分库”指:在进行数据库扩容时,以2倍数进行扩容。比如:1台扩容2台,2台扩容4台,以此类推。最后把Order库分了8个库中,每个库10个表。
根据uid计算数据库编号:
分库信息 = (uid / 10) % 8 + 1
根据uid计算表编号:
表编号 = uid %10
订单系统的ID必须具有全局唯一的特征,简单的方式是利用数据库的序列,每操作一次就能获得一个全局唯一的自增ID,如果支持每秒10w订单,那每秒至少需要生成10w订单ID,通过数据库自增ID显然无法完成上述请求。所以通过内存计算获取全局唯一的订单ID。
JAVA领域着名的唯一ID应该是UUID了,不过UUID太长且包含字母,不适合做订单ID。
通过反复比较筛选,借鉴Twitter的算法实现全局唯一ID。
三部分组成:
最终订单结构:
分库分表信息 + 时间戳 + 机器号 + 自增序号
还是按照第一部分根据uid计算数据库编号和表编号的算法,当uid=9527时,分库信息=1,分表信息=7,将他们进行组合,两位的分库分表信息即为”17”。
我们通过对order表uid维度的分库分表,实现了order表的超高并发写入与更新,通过uid和订单ID查询订单信息。
上面方案虽然简单,但是保持两个order表机器的数据一致是很麻烦的事情。
两个表集群显然是在不同的数据库集群中,如果写入与更新中引入强一致性的分布式事务,这无疑会大大降低系统效率,增长服务响应时间,这是我们所不能接受的,所以引入了消息队列进行异步数据同步,为了实现数据的最终一致性。
当然消息队列的各种异常会造成数据不一致,所以我们又引入了实时服务监控,实时计算两个集群的数据差异,并进行一致性同步。
所谓数据库高可用指的是:
当数据库由于各种原因出现问题时,能实时或快速的恢复数据库并修补数据。
从整体集群角度看,就像没有出任何问题一样,需要注意的是,这里的恢复数据库服务并不一定是指修复原有数据库,也包括将服务切换到另外备用的数据库。
数据库高可用的主要型核或工作是数据恢复月数据修补,一般我们完成这两项工作的时间长短,作为衡量高可用好坏的标准。
我们认为,数据库运维应该和项目组分开,当数据库出现问题时,应由DBA实现统一恢复,不需要项目组操作服务,这样便于做到自动化,缩短服务恢复时间。
如上图所示,web服务器将不再直接连接从库DB2和DB3,而是连接LVS负载均衡,由LVS连接从库。
这样做的好处是LVS能自动感知从库是否可用,从库DB2宕机后,LVS将不会把读数据请求再发向DB2。
同时DBA需要增减从库节点时,只需独立操作LVS即可,不再需要项目组更新配置文件,重启服务器来配合。
再来看主库高可用结构图:
如上图所示,web服务器将不氏搭再直接连接主库DB1,而是连接KeepAlive虚拟出的一个虚拟ip,再将此虚拟ip映射到主库DB1上,同时添加DB_bak从库,实时同步DB1中的数据。
正常情况下web还是在DB1中读写数据,当DB1宕机后,脚本会自动将DB_bak设置成主库,并将虚拟ip映射到DB_bak上,web服务将使用 健康 的DB_bak作为主库进行读写访问。
这样只需几秒的时间,就能完成主数据库服务恢复。
组合上面的结构,得到主从高可用结构图:
数据库高可用还包含数据修补,由于我们在操作核心数据时,都是先记录日志再执行更新,加上实现了近乎实时的快速恢复数据库服务,所以修补的数据量都不大,一个简单的恢复脚本就能快速完成数据修复。
支付系统除了最核心的支付订单表与支付流水表外,还有一些配置信息表和一些用户相关信息表。如果所有的读操作都在数据库上完成,系统性能将大打折扣,所以我们引入了数据分级机制。
我们简单的将支付系统的数据划分成了3级:
使用本地内存缓存有一个数据同步问题,因为配置信息缓存在内存中,而本地内存无法感知到配置信息在数据库的修改,这样会造成数据库中数据和本地内存中数据不一致的问题。
为了解决此问题,我们开发了一个高可用的消息推送平台,当配置信息被修改时,我们可以使用推送平台,给支付系统所有的服务器推送配置文件更新消息,服务器收到消息会自动更新配置信息,并给出成功反馈。
举个简单的例子,我们目前订单的处理能力是平均10万下单每秒,峰值14万下单每秒,如果同一秒钟有100万个下单请求进入支付系统,毫无疑问我们的整个支付系统就会崩溃,后续源源不断的请求会让我们的服务集群根本启动不起来,唯一的办法只能是切断所有流量,重启整个集群,再慢慢导入流量。
我们在对外的web服务器上加一层“粗细管道”,就能很好的解决上面的问题。
请看上面的结构图,http请求在进入web集群前,会先经过一层粗细管道。入口端是粗口,我们设置最大能支持100万请求每秒,多余的请求会被直接抛弃掉。出口端是细口,我们设置给web集群10万请求每秒。
剩余的90万请求会在粗细管道中排队,等待web集群处理完老的请求后,才会有新的请求从管道中出来,给web集群处理。
这样web集群处理的请求数每秒永远不会超过10万,在这个负载下,集群中的各个服务都会高校运转,整个集群也不会因为暴增的请求而停止服务。
如何实现粗细管道?nginx商业版中已经有了支持,相关资料请搜索
nginx max_conns,需要注意的是max_conns是活跃连接数,具体设置除了需要确定最大TPS外,还需确定平均响应时间。
6. 毕设要做一个支付系统,请问高手做的话需要什么麻烦推荐2本书,跪谢
你们做的这个毕业设计有碰拦什么要求么,比如用什么语言什么数据库、实现什么功能、用B/S还是C/S结构来实现?
我的建议是用Structs来做,Struts是一个MVC框架(Framework),用于快速开发Java Web应用。这里的M是模型(Model)、V是视图(View)、C是控制(Controller)的意思,视图部分用jsp来实现,控制部分用java来做。
如果仅仅是毕业设计而不是需要上线的系统的话,数据库用Access就可以了,要不一般迟粗用ORACLE来做的。
书,你可以去书店看看,找一些有例子的书而不是侧重讲理论的,或笑旦胡者在网上找找有关这方面的例子,参考一下他们是如何实现的。如果你是今年毕业的话,现在眼瞅着就4月份了,我觉得时间挺紧的,不过你也别太着急,祝顺利完成吧。
7. 数据库设计
一、数据库设计的生存期
按照规范设计的方法,考虑到数据库及其应用系统开发的全过程,将数据库设计分为六个阶段。如下图。
① 需求分析
需求收集和分析,得到用数据字典描述的数据需求,用数据流图描述的处理需求。
② 概念结构设计
对需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型(用E-R图表示)。 ③ 逻辑结构设计
将概念结构转换为某个DBMS所支持的数据模型(例如关系模型),并对其进行优化。
④ 物理结构设计
为逻辑数据模型选取一个最适合应用环境的物理结构(包括存储结构和存取方法)。
⑤ 数据库实施
运用DBMS提供的数据语言(例如SQL)及其宿主语言(例如C),根据逻辑设计和物理设计的结果建立数据库,编制与调试应用程序,组织数据入库,并进行试运行。
⑥ 数据库运行和维护
数据库应用系统经过试运行后即可投入正式运行。在数据库系统运行过程中必须不断地对其进行评价、调整与修改。
说明:设计一个完善的数据库应用系统是不可能一蹴而就的,它往往是上述六个阶段的不断反复。
3
三、数据库设计阶段的模式
数据库结构设计的不同阶段形成数据库的各级模式,如下图。 需求分析阶段:综合各个用户的应用需求;
概念设计阶段:形成独立于机器特点,独立于各个DBMS产品的概念模式,即E-R图;
逻辑设计阶段:将E-R图转换成具体的数据库产品支持的数据模型,如关系模型,形成数据库逻辑模式;然后根据用户处理的要求、安全性的考虑,在基本表的基础上再建立必要的视图,形成数据的外模式;
物理设计阶段:根据DBMS特点和处理的需要,进行物理存储安排,建立索引,形成数据库内模式。
8. 数据库表结构设计,常见的数据库管理系统
一、数据场景 1、表结构简介 任何工具类的东西都是为了解决某个场景下的问题,比如Redis缓存系统热点数据,ClickHouse解决海量数据的实时分析,MySQL关系型数据库存储结构化数据。数据的存储则需要设计对应的表结构,清楚的表结构,有助于快速开发业务,和理解系统。表结构的设计通常从下面几个方面考虑:业务场景、设计规范、表结构、字段属性、数据管理。
2、用户场景
例如存储用户基础信息数据,通常都会下面几个相关表结构:用户信息表、单点登录表、状态管理表、支付账户表等。
用户信息表
存储用户三要素相关信息:姓名,手机号,身份证,登录密码,邮箱等。
CREATE TABLE `ms_user_center` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID', `user_name` varchar(20) NOT NULL COMMENT '用户名', `real_name` varchar(20) DEFAULT NULL COMMENT '真实姓名', `pass_word` varchar(32) NOT NULL COMMENT '密码', `phone` varchar(20) NOT NULL COMMENT '手机号', `email` varchar(32) DEFAULT NULL COMMENT '邮箱', `head_url` varchar(100) DEFAULT NULL COMMENT '用户头像URL', `card_id` varchar(32) DEFAULT NULL COMMENT '身份证号', `user_sex` int(1) DEFAULT '1' COMMENT '用户性别:0-女,1-男', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_time` datetime DEFAULT NULL COMMENT '更新时间', `state` int(1) DEFAULT '1' COMMENT '是否可用,0-不可用,1-可用', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户表'; 单点登录表
用意是在多个业务系统中,用户登录一次就可以访问所有相互信任的业务子系统,是聚合业务平台常用的解决方案。
CREATE TABLE `ms_user_sso` ( `user_id` int(11) NOT NULL COMMENT '用户ID', `sso_id` varchar(32) NOT NULL COMMENT '单点信息编号ID', `sso_code` varchar(32) NOT NULL COMMENT '单点登录码,唯一核心标识', `log_ip` varchar(32) DEFAULT NULL COMMENT '登录IP地址', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_time` datetime DEFAULT NULL COMMENT '更新时间', `state` int(1) DEFAULT '1' COMMENT '是否可用,0-不可用,1-可用', PRIMARY KEY (`user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户单点登录表'; 状态管理表
系统用户在使用时候可能出现多个状态,例如账户冻结、密码锁定等,把状态聚合到一起,可以更加方便的管理和验证。
CREATE TABLE `ms_user_status` ( `user_id` int(11) NOT NULL COMMENT '用户ID', `account_status` int(1) DEFAULT '1' COMMENT '账户状态:0-冻结,1-未冻结', `real_name_status` int(1) DEFAULT '0' COMMENT '实名认证状态:0-未实名,1-已实名', `pay_pass_status` int(1) DEFAULT '0' COMMENT '支付密码是否设置:0-未设置,1-设置', `wallet_pass_status` int(1) DEFAULT '0' COMMENT '钱包密码是否设置:0-未设置,1-设置', `wallet_status` int(1) DEFAULT '1' COMMENT '钱包是否冻结:0-冻结,1-未冻结', `email_status` int(1) DEFAULT '0' COMMENT '邮箱状态:0-未激活,1-激活', `message_status` int(1) DEFAULT '1' COMMENT '短信提醒开启:0-未开启,1-开启', `letter_status` int(1) DEFAULT '1' COMMENT '站内信提醒开启:0-未开启,1-开启', `emailmsg_status` int(1) DEFAULT '0' COMMENT '邮件提醒开启:0-未开启,1-开启', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_time` datetime DEFAULT NULL COMMENT '更新时间', `state` int(1) DEFAULT '1' COMMENT '是否可用,0-不可用,1-可用', PRIMARY KEY (`user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户状态表'; 支付账户表
用户交易的核心表,存储用户相关的账户资金信息。
CREATE TABLE `ms_user_wallet` ( `wallet_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '钱包ID', `user_id` int(11) NOT NULL COMMENT '用户ID', `wallet_pwd` varchar(32) DEFAULT NULL COMMENT '钱包密码', `total_account` decimal(20,2) DEFAULT '0.00' COMMENT '账户总额', `usable_money` decimal(20,2) DEFAULT '0.00' COMMENT '可用余额', `freeze_money` decimal(20,2) DEFAULT '0.00' COMMENT '冻结金额', `freeze_time` datetime DEFAULT NULL COMMENT '冻结时间', `thaw_time` datetime DEFAULT NULL COMMENT '解冻时间', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_time` datetime DEFAULT NULL COMMENT '更新时间', `state` int(1) DEFAULT '1' COMMENT '是否可用,0-不可用,1-可用', PRIMARY KEY (`wallet_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户钱包'; 二、设计规范 1、涉及模块
通过上面几个表设计的案例,可以看到表设计关联到数据库的各个方面知识:数据类型,索引,编码,存储引擎等。表设计是一个很大的命题,不过也遵循一个基本规范:三范式。
2、三范式 基础概念
一范式
表的列的具有原子性,不可再分解,即列的信息,不能分解,关系型数据库MySQL、Oracle等自动的满足。
二范式
每个事实的数据记录只会出现一次, 不会冗余, 通常设计一个主键来实现。
三范式
要求一个表中不包含已经存在于其它表的非主键信息,例如部门和员工的信息,员工表包含部门表的主键ID,则可以关联获取相关信息,没必要在员工表保存相关信息。
优缺点对比
范式化设计
范式化结构设计通常更新快,因为冗余数据较少,表结构轻巧,也更好的写入内存中。但是查询起来涉及到关联,代价非常高,非常损耗查询性能。
反范式化设计
所有的数据都在一张表中,避免关联查询,索引的有效性更高,但是数据的冗余性极高。
建议结论
上述的两种设计方式在实际开发中都是不存在的,在实际开发中都是混合使用。比如汇总统计,缓存数据,都会基于反范式化的设计。
三、字段属性
合适的字段类型对于高性能来说非常重要,基本原则如下:简单的类型占用资源更少;在可以正确存储数据的情况下,选最小的数据类型。
1、数据类型选择 整数类型
TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT,根据数据类型范围合理选择即可。
实数类型
FLOAT、DOUBLE、DECIMAL,建议资金货币相关类型使用高精度DECIMAL存储,或者把数据成倍扩大为整数,采用BIGINT存储,不过处理相对麻烦。
字符类型
CHAR、VARCHAR,长度不确定建议采用VARCHAR存储,不过VARCHAR类型需要额外开销记录字符串长度。CHAR适合存储短字符,或者定长字符串,例如MD5的加密结构。
时间类型
DATETIME、TIMESTAMP,DATETIME保存大范围的值,精度秒。TIMESTAMP以时间戳的格式,范围相对较小,效率也相对较高,所以通常情况建议使用。
MySQL的字段类型有很多种,可以根据数据特性选择合适的,这里只描述常见的几种类型。
2、基础用法操作 数据类型
修改字段类型
ALTER TABLE ms_user_sso MODIFY state CHAR(1) DEFAULT '0' ; ALTER TABLE ms_user_sso MODIFY state INT(1) DEFAULT '1' COMMENT '状态:0不可用,1可用';
修改名称位置
ALTER TABLE ms_user_sso CHANGE log_ip login_ip VARCHAR(32) AFTER update_time ; 索引使用
索引类型:主键索引,普通索引,唯一索引,组合索引,全文索引。这里演示普通索引的操作。MySQL的核心模块,后续详说。
添加索引
ALTER TABLE ms_user_wallet ADD INDEX user_id_index(user_id) ; CREATE INDEX state_index ON ms_user_wallet(state) ;
查看索引
SHOW INDEX FROM ms_user_wallet;
删除索引
DROP INDEX state_index ON ms_user_wallet ;
修改索引
不具有真正意义上的修改,可以把原有的索引删除之后,再次添加索引。
外键关联
用处:外键关联的作用保证多个数据表的数据一致性和完整性,建表时先有主表,后有从表;删除数据表,需要先删从表,再删主表。复杂场景不建议使用,实际开发中用的也不多。
添加外键
ALTER TABLE ms_user_wallet ADD CONSTRAINT user_id_out_key FOREIGN KEY(user_id) REFERENCES ms_user_center(id) ;
删除外键
ALTER TABLE ms_user_wallet DROP FOREIGN KEY user_id_out_key ; 四、表结构管理 1、查看结构 DESC ms_user_status ; SHOW CREATE TABLE ms_user_status ; 2、字段结构 添加字段 ALTER TABLE ms_user_status ADD `delete_time` datetime DEFAULT NULL COMMENT '删除时间' ; 删除字段 ALTER TABLE ms_user_status DROP COLUMN delete_time ; 3、修改表名 ALTER TABLE ms_user_center RENAME ms_user_info ; 4、存储引擎 存储引擎 SELECT VERSION() ; SHOW ENGINES ;
MySQL 5.6 支持的存储引擎有InnoDB、MyISAM、Memory、Archive、CSV、BLACKHOLE等。一般默认使用InnoDB,支持事务管理。该模块MySQL核心,后续详解。
修改引擎
数据量大的场景下,存储引擎修改是一个难度极大的操作,容易会导致表的特性变动,引起各种后续反应,后续会详说。
ALTER TABLE ms_user_sso ENGINE = MyISAM ; 5、修改编码
表字符集默认使用utf8,通用,无乱码风险,汉字3字节,英文1字节,utf8mb4是utf8的超集,有存储4字节例如表情符号时使用。
查看编码 SHOW VARIABLES LIKE 'character%'; 修改编码 ALTER TABLE ms_user_sso DEFAULT CHARACTER SET utf8mb4; 五、数据管理 1、增删改查
添加数据
INSERT INTO ms_user_sso ( user_id,sso_id,sso_code,create_time,update_time,login_ip,state ) VALUES ( '1','SSO7637267','SSO78631273612', '2019-12-24 11:56:57','2019-12-24 11:57:01','127.0.0.1','1' );
更新数据
UPDATE ms_user_sso SET user_id = '1',sso_id = 'SSO20191224',sso_code = 'SSO20191224', create_time = '2019-11-24 11:56:57',update_time = '2019-11-24 11:57:01', login_ip = '127.0.0.1',state = '1' WHERE user_id = '1';
查询数据
一般情况下都是禁止使用 select* 操作。
SELECT user_id,sso_id,sso_code,create_time,update_time,login_ip,state FROM ms_user_sso WHERE user_id = '1';
删除数据
DELETE FROM ms_user_sso WHERE user_id = '2' ;
不带where条件,就是删除全部数据。原则上不允许该操作,优化篇会详解。TRUNCATE TABLE也是清空表数据,但是占用的资源相对较少。
2、数据安全 不可逆加密
这类加密算法,多用来做数据验证操作,比如常见的密码验证。
SELECT MD5('cicada')='' ; SELECT SHA('cicada')=''; SELECT PASSWORD('smile')='*' ; 可逆加密
安全性要求高的系统,需要做三级等保,对数据的安全性极高,数据在存储时必须加密入库,取出时候需要解密,这些就需要可逆加密。
SELECT DECODE(ENCODE('123456','key_salt'),'key_salt') ; SELECT AES_DECRYPT(AES_ENCRYPT('cicada','salt123'),'salt123');
上述数据安全的管理,也可以基于应用系统的服务(代码)层进行处理,相对专业的流程是从数据生成源头处理,规避数据传递过程泄露,造成不必要的风险。