對象型接口
爲了更好的理解之後章節的示例,我們先了解一下示例中用到的數據模型。
[數據模型描述方式]
下面是幾個數據表,每個表都應有個作爲主鍵的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即可。