Strategi Dual-Schema (SQLite & MySQL)
Salah satu keunggulan utama Biawak adalah Strategi Dual-Schema. Anda dapat melakukan pengembangan secara lokal tanpa setup database tambahan menggunakan file-based SQLite, dan bertransisi ke database enterprise MySQL di server produksi cukup dengan mengubah konfigurasi .env.
β‘ Pembuatan Dual-Schema via CLI
Section titled ββ‘ Pembuatan Dual-Schema via CLIβGunakan perintah pembuat skema tabel otomatis berikut:
bun run make schema product
Hasil: Membuat dua berkas struktur tabel database secara paralel:
src/db/schema/sqlite/product.ts(Untuk database lokal dev)src/db/schema/mysql/product.ts(Untuk database produksi)
βοΈ Bagaimana Dual-Schema Berjalan?
Section titled ββοΈ Bagaimana Dual-Schema Berjalan?βDrizzle ORM memiliki dialek query SQL yang berbeda untuk SQLite dan MySQL. Biawak mengatasi perbedaan ini dengan membuat skema tabel kembar.
π§© 1. Contoh Skema SQLite (src/db/schema/sqlite/product.ts):
Section titled βπ§© 1. Contoh Skema SQLite (src/db/schema/sqlite/product.ts):βimport { sqliteTable, text, integer } from "drizzle-orm/sqlite-core";
export const products = sqliteTable("products", {
id: text("id").primaryKey(),
name: text("name").notNull(),
price: integer("price").notNull(),
});
π§© 2. Contoh Skema MySQL (src/db/schema/mysql/product.ts):
Section titled βπ§© 2. Contoh Skema MySQL (src/db/schema/mysql/product.ts):βimport { mysqlTable, varchar, int } from "drizzle-orm/mysql-core";
export const products = mysqlTable("products", {
id: varchar("id", { length: 255 }).primaryKey(),
name: varchar("name", { length: 255 }).notNull(),
price: int("price").notNull(),
});
π 3. Penyatuan Impor Skema (src/db/schema/index.ts):
Section titled βπ 3. Penyatuan Impor Skema (src/db/schema/index.ts):βSemua skema tabel diimpor secara kondisional berdasarkan driver database aktif (DB_DRIVER di berkas .env) sehingga aplikasi Hono Anda hanya perlu mengimpor dari berkas indeks tunggal:
import { sqliteSchema } from "./sqlite/index.js";
import { mysqlSchema } from "./mysql/index.js";
import dotenv from "dotenv";
dotenv.config();
const isMySQL = process.env.DB_DRIVER === "mysql";
// Mengekspor skema yang sesuai secara otomatis!
export const schema = isMySQL ? mysqlSchema : sqliteSchema;
Dengan arsitektur penyatuan ini, query Drizzle di dalam aplikasi Anda tetap seragam tanpa perlu mengkhawatirkan perbedaan database di belakang layar:
import { db } from "../config/drizzle.js";
import { products } from "../db/schema/index.js";
// Query ini otomatis mengeksekusi dialek SQL yang sesuai!
const allProducts = await db.select().from(products);
