Update datamodel in documentation
This commit is contained in:
parent
19a410d553
commit
28db52dc2e
92
README.md
92
README.md
@ -40,28 +40,80 @@ A web application for tracking grocery prices and shopping events. Built with Fa
|
|||||||
|
|
||||||
## Data Model
|
## Data Model
|
||||||
|
|
||||||
### Groceries
|
### Core Entities
|
||||||
- `id`: Primary key
|
|
||||||
- `name`: Grocery name
|
|
||||||
- `price`: Current price
|
|
||||||
- `category`: Food category
|
|
||||||
- `organic`: Boolean flag
|
|
||||||
- `weight`: Weight/volume
|
|
||||||
- `weight_unit`: Unit (g, kg, ml, l, piece)
|
|
||||||
|
|
||||||
### Shops
|
#### Groceries (`groceries` table)
|
||||||
- `id`: Primary key
|
- `id`: Integer, Primary key, Auto-increment
|
||||||
- `name`: Shop name
|
- `name`: String, Grocery name (indexed, required)
|
||||||
- `city`: Location city
|
- `category`: String, Food category (required)
|
||||||
- `address`: Optional full address
|
- `organic`: Boolean, Organic flag (default: false)
|
||||||
|
- `weight`: Float, Weight/volume (optional)
|
||||||
|
- `weight_unit`: String, Unit of measurement (default: "piece")
|
||||||
|
- Supported units: "g", "kg", "ml", "l", "piece"
|
||||||
|
- `created_at`: DateTime, Creation timestamp (auto-generated)
|
||||||
|
- `updated_at`: DateTime, Last update timestamp (auto-updated)
|
||||||
|
|
||||||
### Shopping Events
|
#### Shops (`shops` table)
|
||||||
- `id`: Primary key
|
- `id`: Integer, Primary key, Auto-increment
|
||||||
- `shop_id`: Foreign key to shops
|
- `name`: String, Shop name (indexed, required)
|
||||||
- `date`: Purchase date
|
- `city`: String, Location city (required)
|
||||||
- `total_amount`: Optional total cost
|
- `address`: String, Full address (optional)
|
||||||
- `notes`: Optional notes
|
- `created_at`: DateTime, Creation timestamp (auto-generated)
|
||||||
- `groceries`: Many-to-many relationship with amounts
|
|
||||||
|
#### Shopping Events (`shopping_events` table)
|
||||||
|
- `id`: Integer, Primary key, Auto-increment
|
||||||
|
- `shop_id`: Integer, Foreign key to shops (required)
|
||||||
|
- `date`: DateTime, Purchase date (required, default: current time)
|
||||||
|
- `total_amount`: Float, Total cost of shopping event (optional, auto-calculated)
|
||||||
|
- `notes`: String, Optional notes about the purchase
|
||||||
|
- `created_at`: DateTime, Creation timestamp (auto-generated)
|
||||||
|
|
||||||
|
### Association Table
|
||||||
|
|
||||||
|
#### Shopping Event Groceries (`shopping_event_groceries` table)
|
||||||
|
Many-to-many relationship between shopping events and groceries with additional data:
|
||||||
|
- `id`: Integer, Primary key, Auto-increment
|
||||||
|
- `shopping_event_id`: Integer, Foreign key to shopping_events (required)
|
||||||
|
- `grocery_id`: Integer, Foreign key to groceries (required)
|
||||||
|
- `amount`: Float, Quantity purchased in this event (required, > 0)
|
||||||
|
- `price`: Float, Price at time of purchase (required, ≥ 0)
|
||||||
|
|
||||||
|
### Relationships
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────────┐ ┌─────────────────────────────┐ ┌─────────────────┐
|
||||||
|
│ Shops │ │ Shopping Event Groceries │ │ Groceries │
|
||||||
|
│ │ │ (Association Table) │ │ │
|
||||||
|
│ • id │ ←──────→│ • shopping_event_id │ ←──────→│ • id │
|
||||||
|
│ • name │ 1:N │ • grocery_id │ N:M │ • name │
|
||||||
|
│ • city │ │ • amount │ │ • category │
|
||||||
|
│ • address │ │ • price │ │ • organic │
|
||||||
|
│ • created_at │ │ │ │ • weight │
|
||||||
|
└─────────────────┘ └─────────────────────────────┘ │ • weight_unit │
|
||||||
|
│ │ │ • created_at │
|
||||||
|
│ │ │ • updated_at │
|
||||||
|
│ 1:N │ └─────────────────┘
|
||||||
|
▼ │
|
||||||
|
┌─────────────────┐ │
|
||||||
|
│ Shopping Events │ ←───────────────────────┘
|
||||||
|
│ │ 1:N
|
||||||
|
│ • id │
|
||||||
|
│ • shop_id │
|
||||||
|
│ • date │
|
||||||
|
│ • total_amount │
|
||||||
|
│ • notes │
|
||||||
|
│ • created_at │
|
||||||
|
└─────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
### Key Features
|
||||||
|
|
||||||
|
- **Price History**: Each grocery purchase stores the price at that time, enabling price tracking
|
||||||
|
- **Flexible Quantities**: Support for decimal amounts (e.g., 1.5 kg of apples)
|
||||||
|
- **Auto-calculation**: Total amount can be automatically calculated from individual items
|
||||||
|
- **Free Items**: Supports items with price 0 (samples, promotions, etc.)
|
||||||
|
- **Audit Trail**: All entities have creation timestamps for tracking
|
||||||
|
- **Data Integrity**: Foreign key constraints ensure referential integrity
|
||||||
|
|
||||||
## Setup Instructions
|
## Setup Instructions
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user