<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Teaching-Structure on Tarragon</title><link>https://tarrragon.github.io/blog/tags/teaching-structure/</link><description>Recent content in Teaching-Structure on Tarragon</description><generator>Hugo -- gohugo.io</generator><language>zh-TW</language><copyright>Tarragon (CC BY 4.0)</copyright><lastBuildDate>Thu, 21 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://tarrragon.github.io/blog/tags/teaching-structure/index.xml" rel="self" type="application/rss+xml"/><item><title>SQLite Teaching Structure</title><link>https://tarrragon.github.io/blog/backend/01-database/vendors/sqlite/teaching-structure/</link><pubDate>Thu, 21 May 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/backend/01-database/vendors/sqlite/teaching-structure/</guid><description>&lt;p>SQLite teaching structure 的核心責任是把 SQLite 從單篇 vendor overview 擴成可教學的服務章節群。PostgreSQL / MySQL 的完整度來自 overview、deep article、migration playbook 與案例路由；SQLite 的完整度也要保留同樣層級，但正文重點要貼合它自己的服務語言：single file、embedded process、writer boundary、backup / restore、test fixture、local-first 與 edge SQLite 變體。&lt;/p>
&lt;h2 id="完成標準">完成標準&lt;/h2>
&lt;p>SQLite 章節群的完成標準是讀者能回答三個問題。第一，SQLite 何時是正式狀態而非臨時檔案；第二，SQLite production 化後要如何處理 WAL、backup、restore、migration、測試與觀測；第三，SQLite 成長後該升到 PostgreSQL / MySQL、Cloudflare D1、Turso / libSQL、Litestream / LiteFS 或 mobile sync。&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>層級&lt;/th>
 &lt;th>SQLite 對應文件&lt;/th>
 &lt;th>教學責任&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>Service overview&lt;/td>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/01-database/vendors/sqlite/" data-link-title="SQLite" data-link-desc="embedded、單檔案、test / CLI / edge 場景的標準選擇、近年因 Cloudflare D1 / Turso 等服務復興">SQLite&lt;/a>&lt;/td>
 &lt;td>第一輪服務定位、適用壓力、替代邊界與下一步路由&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Core deep article&lt;/td>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/01-database/vendors/sqlite/file-lifecycle-backup-boundary/" data-link-title="SQLite file lifecycle 與 backup boundary" data-link-desc="把 SQLite 單檔案正式狀態拆成 WAL、backup API、restore drill、corruption recovery 與操作責任邊界">File lifecycle / backup boundary&lt;/a>&lt;/td>
 &lt;td>WAL sidecar、backup API、restore drill、corruption recovery&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Hands-on&lt;/td>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/01-database/vendors/sqlite/hands-on/" data-link-title="SQLite Hands-on 操作路線" data-link-desc="SQLite local file lab、backup / restore drill、WAL busy reproduction、migration fixture、D1 / Turso preview 的操作型章節設計">SQLite Hands-on&lt;/a>&lt;/td>
 &lt;td>local file、backup restore、WAL busy、migration fixture&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Operations&lt;/td>
 &lt;td>WAL / locking、PRAGMA tuning、schema migration、observability&lt;/td>
 &lt;td>日常設定、排錯、容量訊號與 release gate&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Application shape&lt;/td>
 &lt;td>test fixture、mobile / desktop store、local-first sync&lt;/td>
 &lt;td>SQLite 跟 application process / device / test workflow 的關係&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Edge / variants&lt;/td>
 &lt;td>D1 / Turso / libSQL、Litestream / LiteFS&lt;/td>
 &lt;td>分散式或 replicated SQLite 變體的責任邊界&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Migration route&lt;/td>
 &lt;td>SQLite → PostgreSQL、SQLite → D1 / Turso、PostgreSQL → SQLite&lt;/td>
 &lt;td>成長、edge 化或降操作成本時的階段化搬遷&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>這份結構的重點是避免把 SQLite 寫成小型 PostgreSQL。SQLite deep article 要先處理檔案、process、filesystem、device、test 與 edge runtime；SQL dialect、index 與 migration 工具只有在這些責任成立後才展開。&lt;/p>
&lt;h2 id="推薦撰寫順序">推薦撰寫順序&lt;/h2>
&lt;p>撰寫順序要從正式狀態的最低操作責任開始，再逐步擴到應用形狀、edge 變體與 migration。&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>順序&lt;/th>
 &lt;th>文件&lt;/th>
 &lt;th>狀態&lt;/th>
 &lt;th>為什麼排在這裡&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>1&lt;/td>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/01-database/vendors/sqlite/file-lifecycle-backup-boundary/" data-link-title="SQLite file lifecycle 與 backup boundary" data-link-desc="把 SQLite 單檔案正式狀態拆成 WAL、backup API、restore drill、corruption recovery 與操作責任邊界">File lifecycle / backup boundary&lt;/a>&lt;/td>
 &lt;td>已有正文&lt;/td>
 &lt;td>先回答 SQLite 如何成為可恢復的正式狀態&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>2&lt;/td>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/01-database/vendors/sqlite/wal-concurrency-locking/" data-link-title="SQLite WAL Concurrency and Locking" data-link-desc="SQLite WAL mode 如何降低 reader / writer 衝突、保留 single writer boundary，並用 SQLITE_BUSY、WAL growth、checkpoint 訊號判斷 production 上限">WAL concurrency / locking&lt;/a>&lt;/td>
 &lt;td>已有正文&lt;/td>
 &lt;td>writer boundary 是 SQLite production 判斷的核心&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>3&lt;/td>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/01-database/vendors/sqlite/pragma-tuning-performance/" data-link-title="SQLite PRAGMA Tuning and Performance" data-link-desc="SQLite journal_mode、synchronous、busy_timeout、wal_autocheckpoint、cache_size、mmap_size、auto_vacuum 與 performance evidence 的操作判準">PRAGMA tuning / performance&lt;/a>&lt;/td>
 &lt;td>已有正文&lt;/td>
 &lt;td>把 journal、sync、cache、mmap 轉成可驗證的設定&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>4&lt;/td>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/01-database/vendors/sqlite/schema-migration-versioning/" data-link-title="SQLite Schema Migration and Versioning" data-link-desc="SQLite schema migration、user_version、table rebuild、ALTER TABLE 限制、app release compatibility 與 migration evidence">Schema migration / versioning&lt;/a>&lt;/td>
 &lt;td>已有正文&lt;/td>
 &lt;td>單檔案 DB 仍需要版本、rollback 與 app release 配合&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>5&lt;/td>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/01-database/vendors/sqlite/test-fixture-best-practice/" data-link-title="SQLite Test Fixture Best Practice" data-link-desc="SQLite 作為 test fixture、repository contract test、production dialect gap、seed data、fixture snapshot 與 CI evidence 的操作判準">Test fixture best practice&lt;/a>&lt;/td>
 &lt;td>已有正文&lt;/td>
 &lt;td>SQLite 最常被語言教材引用，需要明確 production gap&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>6&lt;/td>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/01-database/vendors/sqlite/mobile-desktop-embedded-store/" data-link-title="SQLite Mobile / Desktop Embedded Store" data-link-desc="SQLite 在 mobile、desktop、CLI、browser profile 與 embedded device 中承擔 local formal state 的資料責任、backup、privacy 與 sync boundary">Mobile / desktop embedded store&lt;/a>&lt;/td>
 &lt;td>已有正文&lt;/td>
 &lt;td>說明 device local state、backup、sync 與 privacy 責任&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>7&lt;/td>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/01-database/vendors/sqlite/local-first-sync-boundary/" data-link-title="SQLite Local-first Sync Boundary" data-link-desc="SQLite local-first app、multi-device sync、server authority、conflict resolution、delete propagation 與 offline-first trade-off">Local-first sync boundary&lt;/a>&lt;/td>
 &lt;td>已有正文&lt;/td>
 &lt;td>把 single-device SQLite 與 multi-device sync 分開&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>8&lt;/td>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/01-database/vendors/sqlite/d1-turso-libsql-comparison/" data-link-title="SQLite D1 / Turso / libSQL Comparison" data-link-desc="Cloudflare D1、Turso、libSQL 與 local SQLite 在 edge、replication、consistency、migration 與 vendor boundary 的比較">D1 / Turso / libSQL comparison&lt;/a>&lt;/td>
 &lt;td>已有正文&lt;/td>
 &lt;td>edge SQLite 變體需要獨立比較，和本地 SQLite 分開&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>9&lt;/td>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/01-database/vendors/sqlite/litestream-litefs-replication/" data-link-title="SQLite Litestream / LiteFS Replication" data-link-desc="Litestream、LiteFS、SQLite backup replication、read replica、failover 與 restore route">Litestream / LiteFS replication&lt;/a>&lt;/td>
 &lt;td>已有正文&lt;/td>
 &lt;td>backup / read replica / failover 的語意要跟 multi-write 分開&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>10&lt;/td>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/01-database/vendors/sqlite/sql-dialect-index-limits/" data-link-title="SQLite SQL Dialect and Index Limits" data-link-desc="SQLite type affinity、NULL / date handling、constraint、index、query planner 與 PostgreSQL / MySQL 差異">SQL dialect and index limits&lt;/a>&lt;/td>
 &lt;td>已有正文&lt;/td>
 &lt;td>對照 PostgreSQL / MySQL 測試與 migration gap&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>11&lt;/td>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/01-database/vendors/sqlite/observability-runbook/" data-link-title="SQLite Observability and Runbook" data-link-desc="SQLite production runbook、backup evidence、WAL growth、busy errors、disk usage、restore drill 與 incident route">Observability / runbook&lt;/a>&lt;/td>
 &lt;td>已有正文&lt;/td>
 &lt;td>把 SQLite 的低操作成本補成可交接 evidence&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>12&lt;/td>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/01-database/vendors/sqlite/hands-on/" data-link-title="SQLite Hands-on 操作路線" data-link-desc="SQLite local file lab、backup / restore drill、WAL busy reproduction、migration fixture、D1 / Turso preview 的操作型章節設計">Hands-on 操作路線&lt;/a>&lt;/td>
 &lt;td>已有正文&lt;/td>
 &lt;td>把 local file、backup、WAL busy、migration fixture 變成演練&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>13&lt;/td>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/01-database/vendors/sqlite/migrate-to-postgresql/" data-link-title="SQLite to PostgreSQL Migration" data-link-desc="SQLite 升級到 PostgreSQL 的 driver、schema diff、data copy、dual run、cutover、rollback 與 cleanup">SQLite to PostgreSQL migration&lt;/a>&lt;/td>
 &lt;td>已有正文&lt;/td>
 &lt;td>多 tenant、權限、HA、schema governance 出現時的主要升級路徑&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>14&lt;/td>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/01-database/vendors/sqlite/migrate-to-d1-turso/" data-link-title="SQLite to D1 / Turso Migration" data-link-desc="SQLite 轉向 Cloudflare D1、Turso / libSQL 的 edge driver、compatibility audit、data movement 與 rollback">SQLite to D1 / Turso route&lt;/a>&lt;/td>
 &lt;td>已有正文&lt;/td>
 &lt;td>edge / serverless 化時的 migration route&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>15&lt;/td>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/01-database/vendors/sqlite/migrate-from-postgresql-simplification/" data-link-title="PostgreSQL to SQLite Simplification" data-link-desc="PostgreSQL 降低操作成本轉向 SQLite 的適用條件、資料責任縮小、export/import、runbook 與 no-go condition">PostgreSQL to SQLite simplification&lt;/a>&lt;/td>
 &lt;td>已有正文&lt;/td>
 &lt;td>小型工具、single-user app 或 embedded 需求的反向路徑&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>這個順序讓 SQLite 先完成自己的核心語言，再處理相鄰產品。D1、Turso、LiteFS、Litestream 都帶有 SQLite 相容性，但教學上要先問它們承擔的是 backup、replication、edge locality、read replica 還是 distributed write。&lt;/p></description><content:encoded><![CDATA[<p>SQLite teaching structure 的核心責任是把 SQLite 從單篇 vendor overview 擴成可教學的服務章節群。PostgreSQL / MySQL 的完整度來自 overview、deep article、migration playbook 與案例路由；SQLite 的完整度也要保留同樣層級，但正文重點要貼合它自己的服務語言：single file、embedded process、writer boundary、backup / restore、test fixture、local-first 與 edge SQLite 變體。</p>
<h2 id="完成標準">完成標準</h2>
<p>SQLite 章節群的完成標準是讀者能回答三個問題。第一，SQLite 何時是正式狀態而非臨時檔案；第二，SQLite production 化後要如何處理 WAL、backup、restore、migration、測試與觀測；第三，SQLite 成長後該升到 PostgreSQL / MySQL、Cloudflare D1、Turso / libSQL、Litestream / LiteFS 或 mobile sync。</p>
<table>
  <thead>
      <tr>
          <th>層級</th>
          <th>SQLite 對應文件</th>
          <th>教學責任</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Service overview</td>
          <td><a href="/blog/backend/01-database/vendors/sqlite/" data-link-title="SQLite" data-link-desc="embedded、單檔案、test / CLI / edge 場景的標準選擇、近年因 Cloudflare D1 / Turso 等服務復興">SQLite</a></td>
          <td>第一輪服務定位、適用壓力、替代邊界與下一步路由</td>
      </tr>
      <tr>
          <td>Core deep article</td>
          <td><a href="/blog/backend/01-database/vendors/sqlite/file-lifecycle-backup-boundary/" data-link-title="SQLite file lifecycle 與 backup boundary" data-link-desc="把 SQLite 單檔案正式狀態拆成 WAL、backup API、restore drill、corruption recovery 與操作責任邊界">File lifecycle / backup boundary</a></td>
          <td>WAL sidecar、backup API、restore drill、corruption recovery</td>
      </tr>
      <tr>
          <td>Hands-on</td>
          <td><a href="/blog/backend/01-database/vendors/sqlite/hands-on/" data-link-title="SQLite Hands-on 操作路線" data-link-desc="SQLite local file lab、backup / restore drill、WAL busy reproduction、migration fixture、D1 / Turso preview 的操作型章節設計">SQLite Hands-on</a></td>
          <td>local file、backup restore、WAL busy、migration fixture</td>
      </tr>
      <tr>
          <td>Operations</td>
          <td>WAL / locking、PRAGMA tuning、schema migration、observability</td>
          <td>日常設定、排錯、容量訊號與 release gate</td>
      </tr>
      <tr>
          <td>Application shape</td>
          <td>test fixture、mobile / desktop store、local-first sync</td>
          <td>SQLite 跟 application process / device / test workflow 的關係</td>
      </tr>
      <tr>
          <td>Edge / variants</td>
          <td>D1 / Turso / libSQL、Litestream / LiteFS</td>
          <td>分散式或 replicated SQLite 變體的責任邊界</td>
      </tr>
      <tr>
          <td>Migration route</td>
          <td>SQLite → PostgreSQL、SQLite → D1 / Turso、PostgreSQL → SQLite</td>
          <td>成長、edge 化或降操作成本時的階段化搬遷</td>
      </tr>
  </tbody>
</table>
<p>這份結構的重點是避免把 SQLite 寫成小型 PostgreSQL。SQLite deep article 要先處理檔案、process、filesystem、device、test 與 edge runtime；SQL dialect、index 與 migration 工具只有在這些責任成立後才展開。</p>
<h2 id="推薦撰寫順序">推薦撰寫順序</h2>
<p>撰寫順序要從正式狀態的最低操作責任開始，再逐步擴到應用形狀、edge 變體與 migration。</p>
<table>
  <thead>
      <tr>
          <th>順序</th>
          <th>文件</th>
          <th>狀態</th>
          <th>為什麼排在這裡</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>1</td>
          <td><a href="/blog/backend/01-database/vendors/sqlite/file-lifecycle-backup-boundary/" data-link-title="SQLite file lifecycle 與 backup boundary" data-link-desc="把 SQLite 單檔案正式狀態拆成 WAL、backup API、restore drill、corruption recovery 與操作責任邊界">File lifecycle / backup boundary</a></td>
          <td>已有正文</td>
          <td>先回答 SQLite 如何成為可恢復的正式狀態</td>
      </tr>
      <tr>
          <td>2</td>
          <td><a href="/blog/backend/01-database/vendors/sqlite/wal-concurrency-locking/" data-link-title="SQLite WAL Concurrency and Locking" data-link-desc="SQLite WAL mode 如何降低 reader / writer 衝突、保留 single writer boundary，並用 SQLITE_BUSY、WAL growth、checkpoint 訊號判斷 production 上限">WAL concurrency / locking</a></td>
          <td>已有正文</td>
          <td>writer boundary 是 SQLite production 判斷的核心</td>
      </tr>
      <tr>
          <td>3</td>
          <td><a href="/blog/backend/01-database/vendors/sqlite/pragma-tuning-performance/" data-link-title="SQLite PRAGMA Tuning and Performance" data-link-desc="SQLite journal_mode、synchronous、busy_timeout、wal_autocheckpoint、cache_size、mmap_size、auto_vacuum 與 performance evidence 的操作判準">PRAGMA tuning / performance</a></td>
          <td>已有正文</td>
          <td>把 journal、sync、cache、mmap 轉成可驗證的設定</td>
      </tr>
      <tr>
          <td>4</td>
          <td><a href="/blog/backend/01-database/vendors/sqlite/schema-migration-versioning/" data-link-title="SQLite Schema Migration and Versioning" data-link-desc="SQLite schema migration、user_version、table rebuild、ALTER TABLE 限制、app release compatibility 與 migration evidence">Schema migration / versioning</a></td>
          <td>已有正文</td>
          <td>單檔案 DB 仍需要版本、rollback 與 app release 配合</td>
      </tr>
      <tr>
          <td>5</td>
          <td><a href="/blog/backend/01-database/vendors/sqlite/test-fixture-best-practice/" data-link-title="SQLite Test Fixture Best Practice" data-link-desc="SQLite 作為 test fixture、repository contract test、production dialect gap、seed data、fixture snapshot 與 CI evidence 的操作判準">Test fixture best practice</a></td>
          <td>已有正文</td>
          <td>SQLite 最常被語言教材引用，需要明確 production gap</td>
      </tr>
      <tr>
          <td>6</td>
          <td><a href="/blog/backend/01-database/vendors/sqlite/mobile-desktop-embedded-store/" data-link-title="SQLite Mobile / Desktop Embedded Store" data-link-desc="SQLite 在 mobile、desktop、CLI、browser profile 與 embedded device 中承擔 local formal state 的資料責任、backup、privacy 與 sync boundary">Mobile / desktop embedded store</a></td>
          <td>已有正文</td>
          <td>說明 device local state、backup、sync 與 privacy 責任</td>
      </tr>
      <tr>
          <td>7</td>
          <td><a href="/blog/backend/01-database/vendors/sqlite/local-first-sync-boundary/" data-link-title="SQLite Local-first Sync Boundary" data-link-desc="SQLite local-first app、multi-device sync、server authority、conflict resolution、delete propagation 與 offline-first trade-off">Local-first sync boundary</a></td>
          <td>已有正文</td>
          <td>把 single-device SQLite 與 multi-device sync 分開</td>
      </tr>
      <tr>
          <td>8</td>
          <td><a href="/blog/backend/01-database/vendors/sqlite/d1-turso-libsql-comparison/" data-link-title="SQLite D1 / Turso / libSQL Comparison" data-link-desc="Cloudflare D1、Turso、libSQL 與 local SQLite 在 edge、replication、consistency、migration 與 vendor boundary 的比較">D1 / Turso / libSQL comparison</a></td>
          <td>已有正文</td>
          <td>edge SQLite 變體需要獨立比較，和本地 SQLite 分開</td>
      </tr>
      <tr>
          <td>9</td>
          <td><a href="/blog/backend/01-database/vendors/sqlite/litestream-litefs-replication/" data-link-title="SQLite Litestream / LiteFS Replication" data-link-desc="Litestream、LiteFS、SQLite backup replication、read replica、failover 與 restore route">Litestream / LiteFS replication</a></td>
          <td>已有正文</td>
          <td>backup / read replica / failover 的語意要跟 multi-write 分開</td>
      </tr>
      <tr>
          <td>10</td>
          <td><a href="/blog/backend/01-database/vendors/sqlite/sql-dialect-index-limits/" data-link-title="SQLite SQL Dialect and Index Limits" data-link-desc="SQLite type affinity、NULL / date handling、constraint、index、query planner 與 PostgreSQL / MySQL 差異">SQL dialect and index limits</a></td>
          <td>已有正文</td>
          <td>對照 PostgreSQL / MySQL 測試與 migration gap</td>
      </tr>
      <tr>
          <td>11</td>
          <td><a href="/blog/backend/01-database/vendors/sqlite/observability-runbook/" data-link-title="SQLite Observability and Runbook" data-link-desc="SQLite production runbook、backup evidence、WAL growth、busy errors、disk usage、restore drill 與 incident route">Observability / runbook</a></td>
          <td>已有正文</td>
          <td>把 SQLite 的低操作成本補成可交接 evidence</td>
      </tr>
      <tr>
          <td>12</td>
          <td><a href="/blog/backend/01-database/vendors/sqlite/hands-on/" data-link-title="SQLite Hands-on 操作路線" data-link-desc="SQLite local file lab、backup / restore drill、WAL busy reproduction、migration fixture、D1 / Turso preview 的操作型章節設計">Hands-on 操作路線</a></td>
          <td>已有正文</td>
          <td>把 local file、backup、WAL busy、migration fixture 變成演練</td>
      </tr>
      <tr>
          <td>13</td>
          <td><a href="/blog/backend/01-database/vendors/sqlite/migrate-to-postgresql/" data-link-title="SQLite to PostgreSQL Migration" data-link-desc="SQLite 升級到 PostgreSQL 的 driver、schema diff、data copy、dual run、cutover、rollback 與 cleanup">SQLite to PostgreSQL migration</a></td>
          <td>已有正文</td>
          <td>多 tenant、權限、HA、schema governance 出現時的主要升級路徑</td>
      </tr>
      <tr>
          <td>14</td>
          <td><a href="/blog/backend/01-database/vendors/sqlite/migrate-to-d1-turso/" data-link-title="SQLite to D1 / Turso Migration" data-link-desc="SQLite 轉向 Cloudflare D1、Turso / libSQL 的 edge driver、compatibility audit、data movement 與 rollback">SQLite to D1 / Turso route</a></td>
          <td>已有正文</td>
          <td>edge / serverless 化時的 migration route</td>
      </tr>
      <tr>
          <td>15</td>
          <td><a href="/blog/backend/01-database/vendors/sqlite/migrate-from-postgresql-simplification/" data-link-title="PostgreSQL to SQLite Simplification" data-link-desc="PostgreSQL 降低操作成本轉向 SQLite 的適用條件、資料責任縮小、export/import、runbook 與 no-go condition">PostgreSQL to SQLite simplification</a></td>
          <td>已有正文</td>
          <td>小型工具、single-user app 或 embedded 需求的反向路徑</td>
      </tr>
  </tbody>
</table>
<p>這個順序讓 SQLite 先完成自己的核心語言，再處理相鄰產品。D1、Turso、LiteFS、Litestream 都帶有 SQLite 相容性，但教學上要先問它們承擔的是 backup、replication、edge locality、read replica 還是 distributed write。</p>
<h2 id="文件命名規則">文件命名規則</h2>
<p>SQLite 章節群的檔名用服務責任命名，product-first 命名只留給 D1 / Turso / libSQL 這類 product boundary 本身就是教學主題的文件。</p>
<table>
  <thead>
      <tr>
          <th>類型</th>
          <th>命名方式</th>
          <th>範例</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Core deep</td>
          <td><code>{mechanism}-{responsibility}</code></td>
          <td><code>wal-concurrency-locking.md</code></td>
      </tr>
      <tr>
          <td>Operation</td>
          <td><code>{operation}-{decision-signal}</code></td>
          <td><code>pragma-tuning-performance.md</code></td>
      </tr>
      <tr>
          <td>Application</td>
          <td><code>{context}-{state-role}</code></td>
          <td><code>mobile-desktop-embedded-store.md</code></td>
      </tr>
      <tr>
          <td>Variant</td>
          <td><code>{products}-comparison</code></td>
          <td><code>d1-turso-libsql-comparison.md</code></td>
      </tr>
      <tr>
          <td>Migration</td>
          <td><code>migrate-to-{target}</code></td>
          <td><code>migrate-to-postgresql.md</code></td>
      </tr>
  </tbody>
</table>
<h2 id="cross-module-路由">Cross-module 路由</h2>
<p>SQLite 章節群要固定連到四個 backend 模組。Backup / restore 連到 04 evidence 與 08 incident；test fixture 連到語言教材與 repository adapter；edge / local-first 連到 05 deployment / 07 data protection；performance tuning 連到 09 capacity。</p>
<table>
  <thead>
      <tr>
          <th>SQLite 議題</th>
          <th>主要跨模組路由</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Backup / restore</td>
          <td><a href="/blog/backend/04-observability/observability-evidence-package/" data-link-title="4.20 Observability Evidence Package" data-link-desc="把 log、metric、trace、audit 與資料品質限制包成可交接證據">Observability Evidence Package</a>、<a href="/blog/backend/08-incident-response/incident-decision-log/" data-link-title="8.19 Incident Decision Log" data-link-desc="把事中假設、決策、證據、回退條件與責任人留下可復盤紀錄">Incident Decision Log</a></td>
      </tr>
      <tr>
          <td>Test fixture</td>
          <td><a href="/blog/backend/01-database/repository-adapter/" data-link-title="1.4 Repository Adapter 實作" data-link-desc="Port / Adapter 邊界、row mapping、error translation、ORM vs query builder 選型、contract test 設計">Repository Adapter</a>、語言教材的 contract test</td>
      </tr>
      <tr>
          <td>Local-first / sync</td>
          <td><a href="/blog/backend/07-security-data-protection/data-protection-and-masking-governance/" data-link-title="7.4 資料保護與遮罩治理" data-link-desc="以問題驅動方式整理資料分級、遮罩、匯出與備份治理">Data Protection</a>、offline / device privacy</td>
      </tr>
      <tr>
          <td>Edge SQLite</td>
          <td><a href="/blog/backend/01-database/global-distributed-oltp/" data-link-title="1.11 全球分散式 OLTP" data-link-desc="Spanner / Aurora DSQL / Cosmos DB multi-region write / CockroachDB / TiDB 的全球一致性取捨">Global Distributed OLTP</a>、deployment platform</td>
      </tr>
      <tr>
          <td>Performance</td>
          <td><a href="/blog/backend/09-performance-capacity/bottleneck-localization/" data-link-title="9.5 瓶頸定位流程" data-link-desc="從 app 到 DB / cache / broker / 第三方 quota 的逐層瓶頸定位">Bottleneck Localization</a></td>
      </tr>
  </tbody>
</table>
<h2 id="後續審查點">後續審查點</h2>
<p>SQLite 章節群完稿後要特別審查三個偏誤。第一是把 SQLite 過度美化成 production SQL 替代品；第二是把 edge SQLite 產品跟本地 SQLite 混成同一種能力；第三是把 test fixture 的便利性誤寫成 production equivalence。</p>
]]></content:encoded></item></channel></rss>