成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

你有沒有想過為什么交易和退款要拆開不同的表?

運維 數據庫運維
" 近期做新項目,在設計表結構的時候,突然想起來之前面試的時候遇到的一個問題,那時候也是初出茅廬,對很多東西一知半解(當然現在也是),當時那個小哥哥問我為什么交易和退款要拆成兩個表?是基于什么考慮?有什么好處和優點么? "

[[342932]]

前言

" 近期做新項目,在設計表結構的時候,突然想起來之前面試的時候遇到的一個問題,那時候也是初出茅廬,對很多東西一知半解(當然現在也是),當時那個小哥哥問我為什么交易和退款要拆成兩個表?是基于什么考慮?有什么好處和優點么? "

1.背景

那是一個風和日麗的下午,當然,風和日麗的下午應該配點其他的形容詞,實在是我才疏學淺,只能用這個詞充當了下開頭…… (此處省略小五千字)

趕緊進入正文!

因為之前一直做聚合支付,而在使用過程中,也是支付和退款表拆開的,一直這么用,并沒有覺得不妥。

比如一個交易表基本就是這樣的:

字段 類型 含義
id bigint 主鍵 id
trans_id varchar 交易訂單號
trans_amount bigint 訂單金額
trans_status tinyint 交易狀態
…… …… ……
create_time datetime 創建時間
update_time datetime 更新時間

退款表也差不多就是這樣:

字段 類型 含義
id bigint 主鍵 id
refund_id varchar 退款訂單號
origin_trans_id varchar 原始交易訂單號
refund_status tinyint 退款狀態
refund_amount bigint 退款金額
…… …… ……
create_time datetime 創建時間
update_time datetime 更新時間

大概兩個表就是這樣子的吧!像一些其他字段就先省略了,平常用著也覺得沒什么。

但是恰好那次那個小哥哥就問了這個問題,支付和退款為什么要分開記錄?

當時也是確實是實力不允許,我只是說了就是這么用的,把正向流程和逆向流程拆開,分開實現邏輯,比較方便。

2.個人見解

這里說的不僅僅是交易和退款,同時泛指正向交易和逆向交易,比如充值和消費,借款和貸款,賬戶出賬入賬等等,下面僅說說個人見解,只做討論,如果小伙伴有更好的說法,希望可以留言指出,共同學習。

對賬需要

對賬戶而言,出款表和入款表最后兩方的金額是能對的上的,也就是說收支平衡。

當然這個記在一個表里也是完全可以的。畢竟對出入賬只是流水沒有狀態變化,比如出賬中,入賬中,等等,流水表完全可以記在一個里面,然后用字段進行標識是出賬還是入賬。

拆表需要

在網上看資料經常會說分庫分表,而像訂單這種(交易/退款)完全兩種業務,使用兩張表相對而言比較合適,畢竟交易的訂單相比退款訂單要多的多。

字段設計

交易和退款是完全不同的兩種業務,不像賬戶流水就是資金記錄。

交易除了訂單狀態還有一些交易信息比如商戶號、優惠金額、實付金額、交易渠道、商品 id 名稱、備注等各種信息。

退款則是根據原單進行退款,需要記錄原始訂單號、退款金額(部分退款)、退款信息等。

雖然交易和退款總體上都包含 訂單號、狀態、金額等,但是如果強行放在一個表,就會導致以下問題:

很多字段為空的情況,比如交易不需要原始訂單號,退款需要存儲原始訂單號。本來可以設置索引來提高查詢效率的字段也不太合適設置了。

狀態也不一定可以完全兼容,像交易狀態和退款狀態就很難互相兼容。

開發效率

交易和退款分開之后,兩個人負責不同的業務進行開發,包括業務邏輯和查詢展示。如果放在一起,就很多字段不能保證別人知道有還是沒有,是存儲還是不存儲,畢竟表里設置的都可以為空。這種情況下需要很多溝通,或者干脆一個人進行開發。

設計模式及原則

其他從設計模式及原則的角度上來說,可以說是職責單一,當然再高大上偏理論的我這就扯不出來了。

3.總結

Q&A

Q: 那前端要將兩種甚至多種在一個列表展示該如何處理?

A: 在很多 APP 中大家看到的多種訂單都是在一個列表里面展示出來的,比如:支付寶的賬單頁面。

當然,如果前端分 tab 頁,分開展示不同的業務,那對后端來說簡直不要太友好。不過實際往往不是這樣,這時候就需要將訂單統一存儲。

 

在訂單成功的時候存儲到一個公共存儲中,可以通過 MQ 等,將數據保送到另一張表/庫,或者 ES 中用來存儲。這樣訂單查詢還可以和業務邏輯的表/庫分開。也可以通過 binlog 進行處理,這里的方案只做參考。

結束語

 

之所以寫這篇文章,也是為了總結一下最近工作中遇到的問題,以及處理方法。同時一瞬間想起來了很久前遇到的相同的問題。

 本文轉載自微信公眾號「劉志航」,可以通過以下二維碼關注。轉載本文請聯系劉志航公眾號。

 

責任編輯:武曉燕 來源: 劉志航
相關推薦

2017-11-03 13:52:46

數據分析數據處理大數據

2017-11-03 07:27:50

數據分析數據編譯器

2018-11-14 09:53:48

2018-05-23 00:20:29

2021-06-08 09:49:01

協程池Golang設計

2020-06-02 11:30:46

數據中臺計算機

2015-07-28 14:22:09

BAT

2013-09-22 09:55:23

碼農程序員

2022-06-30 08:03:13

Prisma數據庫工具開源

2021-01-26 05:37:08

分庫分表內存

2016-03-08 09:50:42

2019-03-29 09:00:11

Windows 10PC模擬器

2021-12-26 18:21:28

MySQLAlter更新表

2023-09-21 16:17:48

數據驅動運營

2016-11-04 08:11:14

聲音

2010-10-09 09:20:08

.NET

2022-05-06 08:32:40

Pythonwith代碼

2019-10-15 08:40:29

軟件通訊錄相冊權限

2022-01-10 13:10:11

DNS服務器系統運維

2019-09-09 08:28:48

互聯網數據磁盤
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲精品乱码久久久久久久久久 | 国产精品免费一区二区 | 国产自产c区 | 中文字幕精品一区二区三区精品 | 91影院 | 中文字幕成人在线 | 成人二区 | 亚洲成人福利视频 | 国产高清在线 | 乱一性一乱一交一视频a∨ 色爱av | www国产亚洲精品久久网站 | 久久久久久久久久毛片 | 久久久久久久夜 | 日韩中文字幕第一页 | 99国产精品一区二区三区 | 国产精品乱码一二三区的特点 | 日日人人 | 久久精品成人一区 | 在线成人 | 日韩精品一区二区三区中文在线 | 一区欧美| 国产成人精品午夜视频免费 | 尤物视频在线免费观看 | 日韩精品一区二区三区视频播放 | 日韩影音 | 久久日本 | 国产www. | 国产精品久久久久久久久久久免费看 | 成人国产精品久久 | 天天操天天摸天天爽 | 亚洲一区二区三区四区五区中文 | 一区二区三区四区视频 | 成人av片在线观看 | 国产aⅴ爽av久久久久久久 | 2一3sex性hd| 欧美一区二区另类 | 国精产品一区一区三区免费完 | 国产精品一区二区久久久久 | 久久三区| 中文字幕av网站 | 国产第一页在线观看 |