筋斗雲接口編程 / 對象型接口

對象型接口

爲了更好的理解之後章節的示例,我們先了解一下示例中用到的數據模型。

[數據模型描述方式]

下面是幾個數據表,每個表都應有個作爲主鍵的id字段,是可自動增長的整數類型,即使是關聯表也應定義id字段作爲主鍵。

用戶:
@User: id, uname, phone(s), pwd, name(s), createTm

訂單:(用Ordr而不是Order詞是避免與SQL關鍵字衝突。)
@Ordr: id, userId, status(2), amount, dscr(l)
- status: Enum. 訂單狀態。CR-新創建,RE-已服務,CA-已取消.

訂單日誌:
@OrderLog: id, orderId, tm, action(2), dscr
- action: Enum. 操作類型。CR-創建訂單,PA-付款,RE-完成服務,CA-取消訂單.

接口調用日誌:
@ApiLog: id, tm, addr, app, ac, retval&, req(t), res(t)

一個用戶對應多個訂單(通過userId關聯),一個訂單包含多個物件,以及有多個訂單日誌(通過orderId關聯),表示如下:

User 1<->n Ordr (userId)
Ordr 1<->n OrderLog (orderId)

在設計文檔DESIGN.wiki中,我們用@表名: 字段名1, 字段名2這樣的格式來定義數據模型。前面講過,通過tool/upgrade.php工具可以把它們創建或更新到數據庫中。

字段名的類型根據命名規範自動判斷,比如以id結尾的字段會被自動作爲整型創建,以tm結尾會被當作日期時間類型創建,其它默認是字符串,規則如下:

規則 類型
以”Id”結尾 Integer
以”Price”/”Total”/”Qty”/”Amount”結尾 Currency
以”Tm”/”Dt”/”Time”結尾 Datetime/Date/Time
以”Flag”結尾 TinyInt(1B) NOT NULL

例如,”total”, “docTotal”, “total2”, “docTotal2”都被認爲是Currency類型(字段名後面有數字的,判斷類型時數字會被忽略)。

也可以用一個類型後綴表示,如 retval&表示整型,規則如下:

後綴 類型
& Integer
@ Currency
# Double

字符串可以指定長度如status(2)name(s),字串長度以如下方式描述:

標記 長度
s small=20
m medium=50 (default)
l long=255
t text

爲了簡化接口對象到數據庫表的映射,我們在數據庫中創建的表名和字段名就按上述大小寫相間的風格來,表名或對象名的首字母大寫,表字段或對象屬性的首字母小寫。

某些版本的MySQL/MariaDB在Windows等系統上表和字段名稱全部用大寫字母,遇到這種情況,可在配置文件my.ini中加上設置:

[mysqld]
lower_case_table_names=0 

然後重啓MySQL即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章