Update:added documentation folder and added all documentation required
This commit is contained in:
37
docs/DATABASE_DESIGN.md
Normal file
37
docs/DATABASE_DESIGN.md
Normal file
@@ -0,0 +1,37 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user