38 lines
1.9 KiB
Markdown
38 lines
1.9 KiB
Markdown
# Database Design Documentation
|
|
|
|
## Overview
|
|
This project uses SQLite as a local-first, single-user relational database engine via the `better-sqlite3` driver for Node.js.
|
|
|
|
## Table Schema: `tasks`
|
|
|
|
```sql
|
|
CREATE TABLE IF NOT EXISTS tasks (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
title TEXT NOT NULL,
|
|
description TEXT,
|
|
due_date TEXT NOT NULL,
|
|
topic TEXT NOT NULL,
|
|
status TEXT CHECK(status IN ('Todo','In-Progress','Complete')) NOT NULL DEFAULT 'Todo',
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
is_archived BOOLEAN NOT NULL DEFAULT 0
|
|
);
|
|
```
|
|
|
|
## Field Specifications
|
|
|
|
| Column Name | Data Type | Constraints | Description |
|
|
| :--- | :--- | :--- | :--- |
|
|
| `id` | `INTEGER` | `PRIMARY KEY AUTOINCREMENT` | Unique identifier for each task record. |
|
|
| `title` | `TEXT` | `NOT NULL` | Short summary title of the task. |
|
|
| `description` | `TEXT` | Optional | Extended notes or detailed instructions for the task. |
|
|
| `due_date` | `TEXT` | `NOT NULL` | Due date formatted as ISO string (`YYYY-MM-DD`). |
|
|
| `topic` | `TEXT` | `NOT NULL` | Categorical topic tag (e.g. `SDP`, `Personal`). |
|
|
| `status` | `TEXT` | `CHECK(status IN ('Todo','In-Progress','Complete'))` | Current lifecycle state of the task. Default is `'Todo'`. |
|
|
| `created_at` | `TIMESTAMP` | `DEFAULT CURRENT_TIMESTAMP` | System timestamp recorded on task creation. |
|
|
| `is_archived` | `BOOLEAN` | `DEFAULT 0` | Soft-deletion flag. `0` indicates active, `1` indicates archived. |
|
|
|
|
## Schema Design Decisions
|
|
|
|
1. Soft-Deletion (Archiving): Tasks are never permanently deleted from the database. Setting `is_archived = 1` retains all historical data while hiding archived tasks from active views.
|
|
2. Dynamic Overdue State: The database schema explicitly excludes an `is_overdue` column. Storing `is_overdue` in a database column creates stale data when dates pass. Overdue status is dynamically computed at read-time by comparing `due_date` against the current date for non-completed tasks.
|