在設計物流平台、供應鏈運作或履行資料庫時,閱讀原始的 DBML 資料結構宣告可能會讓您難以直觀地理解資料表、列舉、資料庫結構和參考關係之間的連結。這個DBML 資料結構視覺化工具會將您的 DBML 定義轉換為清晰且可互動的實體關係圖(ERD)。透過解析資料表結構、資料庫結構前綴、列舉類型、資料表群組以及參考關係(>, <, -, <>),資料庫管理員與軟體架構師可以一目了然地檢視複雜的追蹤系統。
DBML 視覺化的運作機制
在 VPasCode 中,DBML 渲染會解析Project 設定、列舉 宣告、資料表群組 區塊,以及資料表 定義轉換為視覺化的 ERD 節點。具有資料庫結構命名空間的資料表(例如logistics.drivers)會以完整路徑顯示,自訂列舉作為嚴格的欄位類型,外鍵參考會自動在實體之間建立視覺連結。
1. 基本設定:完整建立 FleetLogix 物流資料庫結構
為了視覺化整個物流生態系,請以有效的 DBML 語法定義專案參數、員工角色、履行實體、運送日誌與參考約束:
Project fleetlogix {
database_type: 'PostgreSQL'
}
Enum employee_role {
courier
dispatcher
manager
}
Enum status_value {
pending
sorting
transit
delivered
exception
}
TableGroup fulfillment {
logistics.parcels
logistics.vehicles
logistics.hubs
}
Table logistics.drivers {
id int [pk, increment]
email varchar(255) [not null, unique]
full_name varchar(120)
role employee_role [not null, default: 'courier']
joined_at timestamp [not null, default: 'now()']
}
Table logistics.insurance_policies {
id int [pk, increment]
driver_id int [not null]
coverage_plan varchar(20) [not null]
expires_on date [not null]
auto_renew boolean [not null, default: true]
}
Table logistics.parcels {
id int [pk, increment]
tracking_number varchar(200) [not null]
hub_id int
weight_kg int
estimated_days int
service_level varchar(10)
}
Table logistics.vehicles {
id int [pk, increment]
license_plate varchar(160) [not null]
last_service date
}
Table logistics.hubs {
id int [pk, increment]
name varchar(80) [not null, unique]
}
Table logistics.delivery_manifests {
id int [pk, increment]
parcel_id int [not null]
driver_id int [not null]
status status_value [not null]
checkpoint varchar(200)
notes text
Indexes {
(parcel_id, driver_id) [unique]
}
}
Table logistics.telemetry_history {
driver_id int [not null]
parcel_id int [not null]
logged_at timestamp [not null, default: 'now()']
Indexes {
(driver_id, logged_at)
}
}
Ref: logistics.insurance_policies.driver_id > logistics.drivers.id
Ref: logistics.delivery_manifests.parcel_id > logistics.parcels.id
Ref: logistics.delivery_manifests.driver_id > logistics.drivers.id
Ref: logistics.telemetry_history.driver_id > logistics.drivers.id
Ref: logistics.telemetry_history.parcel_id > logistics.parcels.id
Ref: logistics.hubs.id < logistics.parcels.hub_id
Ref: logistics.parcels.id <> logistics.vehicles.id
Ref: logistics.drivers.id - logistics.insurance_policies.id 
FleetLogix 中的高級結構技術
將您的 DBML 程式碼的特定部分拆解,有助於說明不同資料庫功能如何協同運作。
1. 司機管理、保險與自訂列舉
司機註冊與保護模型使用自訂列舉(employee_role),嚴格約束(unique, not null),以及兩種關係類型:標準的一對多查詢和明確的一對一連結(-).
列舉 employee_role {
快遞員
調度員
管理員
}
表格 logistics.drivers {
id int [主鍵,自動遞增]
email varchar(255) [不可為空,唯一]
full_name varchar(120)
role employee_role [不可為空,預設值:'快遞員']
joined_at timestamp [不可為空,預設值:'now()']
}
表格 logistics.insurance_policies {
id int [主鍵,自動遞增]
driver_id int [不可為空]
coverage_plan varchar(20) [不可為空]
expires_on date [不可為空]
auto_renew boolean [不可為空,預設值:true]
}
// 一對多司機關係
Ref: logistics.insurance_policies.driver_id > logistics.drivers.id
// 一對一司機合約關係
Ref: logistics.drivers.id - logistics.insurance_policies.id 
2. 履行分組與多對多關係
實體資產層包含一個TableGroup,包含logistics.parcels, logistics.vehicles,以及logistics.hubs。它使用反向關係運算子(<)來處理區域分發中心,並使用多對多關係運算子(<>)來連接包裹與配送車輛。
TableGroup 履行 {
物流.包裹
物流.車輛
物流.樞紐
}
Table 物流.包裹 {
id 整數 [主鍵, 自增]
追蹤編號 字串(200) [不可為空]
樞紐ID 整數
重量_公斤 整數
預計天數 整數
服務等級 字串(10)
}
Table 物流.車輛 {
id 整數 [主鍵, 自增]
車牌號碼 字串(160) [不可為空]
上次保養 日期
}
Table 物流.樞紐 {
id 整數 [主鍵, 自增]
名稱 字串(80) [不可為空, 唯一]
}
// 使用反向箭頭方向 (<) 的一對多關係
Ref: 物流.樞紐.id < 物流.包裹.hub_id
// 多對多關係 (<>)
Ref: 物流.包裹.id <> 物流.車輛.id 
3. 實時追蹤、複合索引與狀態枚舉
清單與遙測模組監控活躍的包裹處理。它們使用追蹤狀態枚舉(status_value),單一複合唯一索引(例如 (包裹ID, 司機ID) [唯一])來確保記錄完整性,並使用多欄位索引以實現快速的時間順序掃描。
Enum status_value {
等待中
分揀中
在途
已投遞
異常
}
Table 物流.包裹 {
id 整數 [主鍵, 自增]
追蹤編號 字串(200) [不可為空]
}
Table 物流.司機 {
id 整數 [主鍵, 自增]
全名 字串(120) [不可為空]
}
Table 物流.投遞清單 {
id 整數 [主鍵, 自增]
包裹ID 整數 [不可為空]
司機ID 整數 [不可為空]
狀態 status_value [不可為空]
檢查點 字串(200)
備註 文字
索引 {
(包裹ID, 司機ID) [唯一]
}
}
Table 物流.遙測歷史 {
司機ID 整數 [不可為空]
包裹ID 整數 [不可為空]
記錄時間 時戳 [不可為空, 預設值: 'now()']
索引 {
(司機ID, 記錄時間)
}
}
Ref: 物流.投遞清單.包裹ID > 物流.包裹.id
Ref: 物流.投遞清單.司機ID > 物流.司機.id
Ref: 物流.遙測歷史.司機ID > 物流.司機.id
Ref: 物流.遙測歷史.包裹ID > 物流.包裹.id 
DBML 的戰略最佳實務
- 使用 TableGroup 整理核心資料集合: 將密切相關的資料表(例如
物流.包裹,物流.車輛,以及物流.樞紐)歸類於一個TableGroup,以保持視覺佈局的整齊。 - 確保關係方向正確: 標準化使用
>(多對一)或<(一對多)因此視覺上的外鍵箭頭會乾淨地從子欄位指向主鍵。 - 使用索引與列舉值強制執行業務規則: 使用複合唯一索引(例如
(包裹ID, 司機ID) [唯一])以及自訂列舉值(例如狀態值)以在資料結構層級直接強制執行業務約束。