- Published on
DBML คืออะไร
- Authors
- Name
- Somprasong Damyos
- @somprasongd
DBML คืออะไร
DBML (Database Markup Language) เป็น DSL ( Domain Specific Language ) ที่ออกแบบมาสำหรับออกแบบโครงสร้างของฐานข้อมูล คล้ายกับคำสั่งสร้างตารางของ SQL แต่เน้นไปที่ให้อ่านเข้าใจง่ายกว่า
เช่น ถ้าต้องการแบบโครงตารางของระบบแอฟรายรับ-รายจ่าย
จากรูปจะเห็นว่าจะต้องมีตารางข้อมูลผู้ใช้งาน (users) และตารางบันทึกรายรับ-รายจ่าย (transactions) ของผู้ใช้งานแต่ละคน เราสามารถใช้ DBML ออกแบบโครงสร้างตารางได้ ดังนี้
// filename: expend-db.dbml
// เริ่มต้นด้วยการกำหนดรายละเอียดของโปรเจค ExpendApp คือชื่อโปรเจค
Project ExpendApp {
database_type: 'PostgreSQL'
note: 'Description of the project'
}
// วิธีสร้าง Table (belonged to default "public" schema)
Table users {
// [pk] กำหนดให้เป็น primary key
id uuid [pk]
// [not null, unique] กำหนดให้เป็น not null, unique
username varchar [not null, unique]
password varchar [not null]
// สามารถกำหนดค่าเริ่มต้นได้ โดยใช้ default: xxx
created_at timestamp [not null, default: `now()`]
// วิธีการใส่ note ให้กับตาราง
Note: 'Stores user data'
}
// belonged to default "public" schema
Table transactions {
id uuid [pk]
// กำหนดชนิดข้อมูลเป็น enum
type transaction_types [not null]
title varchar [not null]
amount decimal(10, 2) [not null]
created_by uuid [not null]
created_at timestamp [not null, default: `now()`]
Note: 'Stores transaction data'
}
// วิธีสร้าง enum (belonged to default "public" schema)
Enum transaction_types {
income
expend
}
// วิธีการสร้าง relational (> คือ many-to-one, < คือ one-to-many)
Ref:users.id < transactions.created_by // one-to-many
ไฟล์ DBML ทำอะไรได้บ้าง
ตัว DBML นั้นมาพร้อมกับ
- https://dbdiagram.io ใช้สำหรับสร้าง ER Diagrams
- https://dbdocs.io ใช้สำหรับสร้าง database document
- Command-line tool สำหรับแปลงกลับไปกลับระหว่าง DBML ↔ SQL
สร้าง ER Diagrams
สามารถเอา DBML ที่เราเขียนด้านบนไปใส่ในเวบ https://dbdiagram.io เพื่อให้สร้าง ER Diagrams ให้เราได้ ตัวอย่างเช่น https://dbdiagram.io/d/63e9b59b296d97641d805ef6
https://dbdiagram.io/embed/63e9b59b296d97641d805ef6
สร้าง database document
การสร้าง database document จะต้องติดตั้งโปรแกรมเพิ่มเติมก่อน
$ npm install -g dbdocs
วิธีการใช้งาน
# ให้ทำการ login ก่อนเริ่มการใช้งานในครั้งแรก
$ dbdocs login
? Choose a login method: GitHub
? Please input your authentication token: YOUR_GITHUB_TOKEN
✔ Validate token
✔ Save credential
Done.
# วิธีสร้าง document จากไฟล์ .dbml
$ dbdocs build expend-db.dbml --project expend-app
✔ Parsing file content
⚠ Password is not set for 'expend-app'
✔ Done. Visit: https://dbdocs.io/somprasongd/expend-app
# ถ้าต้องการกำหนดรหัสผ่าน
$ dbdocs password --project expend-app --set=1234
✔ Password is set for 'expend-app'.
# ถ้าต้องการเอารหัสผ่าน
$ dbdocs password --project expend-app -r
⚠ Password is removed from 'expend-app'.
เมื่อเสร็จแล้ว สามารถเข้าใช้งานได้จากลิงค์ที่สร้างมาให้ https://dbdocs.io/somprasongd/expend-app
Command-line tool สำหรับแปลงกลับไปกลับระหว่าง DBML ↔ SQL
เริ่มจากติดตั้งโปรแกรม
npm install -g @dbml/cli
วิธีแปลงจาก DBML → SQL เพื่อนำไปใช้งานจริง
$ dbml2sql --postgres expend-db.dbml -o exported-expend-db.sql
✔ Generated SQL dump file (PostgreSQL): exported-expend-db.sql
หรือถ้าเรามีคำสั่งสร้างตารางที่เป็น SQL เราสามารถแปลงเป็น DBML ได้โดย
$ sql2dbml --postgres exported-expend-db.sql -o imported-expend-db.dbml
✔ Generated DBML file from SQL file (PostgreSQL): imported-expend-db.dbml
จบแล้วครับกับการแนะนำการใช้งาน DBML จะเห็นว่า DBML นั้นเป็นภาษาที่อ่านได้ง่ายกว่า SQL เยอะ ทำให้เรานำเอา DBML มาใช้ช่วยในการออกแบบร่วมกับทีม Business ได้ จะได้ ER Digrams ออกมาเลย แถมยังช่วยสร้าง Database Document สุดท้ายก็ค่อยแปลงจาก DBML ไปเป็น SQL เพื่อใช้งานตารางจริงๆ ในฐานข้อมูล