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');
上述數據安全的管理,也可以基於應用系統的服務(代碼)層進行處理,相對專業的流程是從數據生成源頭處理,規避數據傳遞過程泄露,造成不必要的風險。