134 lines
No EOL
6.7 KiB
Markdown
134 lines
No EOL
6.7 KiB
Markdown
# Database Schema Design
|
|
|
|
This document outlines the database schema for the Drinks Inventory System.
|
|
|
|
## Entity Relationship Diagram
|
|
|
|
```
|
|
+----------------+ +-------------------+ +----------------+
|
|
| DrinkType | | InventoryRecord | | Order |
|
|
+----------------+ +-------------------+ +----------------+
|
|
| id | | id | | id |
|
|
| name | | drink_type_id |<----->| created_at |
|
|
| description | | quantity | | updated_at |
|
|
| desired_stock |<----->| timestamp | | status |
|
|
| created_at | | created_at | +----------------+
|
|
| updated_at | | updated_at | ^
|
|
+----------------+ +-------------------+ |
|
|
|
|
|
|
|
|
+----------------+
|
|
| OrderItem |
|
|
+----------------+
|
|
| id |
|
|
| order_id |
|
|
| drink_type_id |
|
|
| quantity |
|
|
| created_at |
|
|
| updated_at |
|
|
+----------------+
|
|
|
|
+-------------------+
|
|
| SystemConfig |
|
|
+-------------------+
|
|
| id |
|
|
| key |
|
|
| value |
|
|
| created_at |
|
|
| updated_at |
|
|
+-------------------+
|
|
```
|
|
|
|
## Tables
|
|
|
|
### DrinkType
|
|
|
|
Stores information about different types of drinks.
|
|
|
|
| Column | Type | Constraints | Description |
|
|
|----------------|--------------|-------------------|---------------------------------------|
|
|
| id | INT | PK, AUTO_INCREMENT| Unique identifier |
|
|
| name | VARCHAR(255) | UNIQUE, NOT NULL | Name of the drink type |
|
|
| description | TEXT | NULL | Optional description |
|
|
| desired_stock | INT | NOT NULL | Desired stock level in crates |
|
|
| created_at | DATETIME | NOT NULL | Record creation timestamp |
|
|
| updated_at | DATETIME | NOT NULL | Record last update timestamp |
|
|
|
|
### InventoryRecord
|
|
|
|
Stores the history of inventory changes.
|
|
|
|
| Column | Type | Constraints | Description |
|
|
|----------------|--------------|-------------------|---------------------------------------|
|
|
| id | INT | PK, AUTO_INCREMENT| Unique identifier |
|
|
| drink_type_id | INT | FK, NOT NULL | Reference to DrinkType |
|
|
| quantity | INT | NOT NULL | Current quantity in crates |
|
|
| timestamp | DATETIME | NOT NULL | When the inventory was recorded |
|
|
| created_at | DATETIME | NOT NULL | Record creation timestamp |
|
|
| updated_at | DATETIME | NOT NULL | Record last update timestamp |
|
|
|
|
### Order
|
|
|
|
Stores information about orders.
|
|
|
|
| Column | Type | Constraints | Description |
|
|
|----------------|--------------|-------------------|---------------------------------------|
|
|
| id | INT | PK, AUTO_INCREMENT| Unique identifier |
|
|
| status | ENUM | NOT NULL | Order status (new, in work, ordered, fulfilled) |
|
|
| created_at | DATETIME | NOT NULL | Record creation timestamp |
|
|
| updated_at | DATETIME | NOT NULL | Record last update timestamp |
|
|
|
|
### OrderItem
|
|
|
|
Stores items within an order.
|
|
|
|
| Column | Type | Constraints | Description |
|
|
|----------------|--------------|-------------------|---------------------------------------|
|
|
| id | INT | PK, AUTO_INCREMENT| Unique identifier |
|
|
| order_id | INT | FK, NOT NULL | Reference to Order |
|
|
| drink_type_id | INT | FK, NOT NULL | Reference to DrinkType |
|
|
| quantity | INT | NOT NULL | Quantity to order in crates |
|
|
| created_at | DATETIME | NOT NULL | Record creation timestamp |
|
|
| updated_at | DATETIME | NOT NULL | Record last update timestamp |
|
|
|
|
### SystemConfig
|
|
|
|
Stores system configuration parameters.
|
|
|
|
| Column | Type | Constraints | Description |
|
|
|----------------|--------------|-------------------|---------------------------------------|
|
|
| id | INT | PK, AUTO_INCREMENT| Unique identifier |
|
|
| key | VARCHAR(255) | UNIQUE, NOT NULL | Configuration key |
|
|
| value | TEXT | NOT NULL | Configuration value |
|
|
| created_at | DATETIME | NOT NULL | Record creation timestamp |
|
|
| updated_at | DATETIME | NOT NULL | Record last update timestamp |
|
|
|
|
## Relationships
|
|
|
|
1. **DrinkType to InventoryRecord**: One-to-Many
|
|
- A drink type can have multiple inventory records
|
|
- Each inventory record belongs to one drink type
|
|
|
|
2. **DrinkType to OrderItem**: One-to-Many
|
|
- A drink type can be included in multiple order items
|
|
- Each order item refers to one drink type
|
|
|
|
3. **Order to OrderItem**: One-to-Many
|
|
- An order can contain multiple order items
|
|
- Each order item belongs to one order
|
|
|
|
## Indexes
|
|
|
|
- `drink_type_id` in `InventoryRecord` table
|
|
- `order_id` in `OrderItem` table
|
|
- `drink_type_id` in `OrderItem` table
|
|
- `key` in `SystemConfig` table
|
|
|
|
## Configuration Parameters
|
|
|
|
The `SystemConfig` table will store the following configuration parameters:
|
|
|
|
- `stock_adjustment_lookback`: How many past orders and the stock at their time should be considered
|
|
- `stock_adjustment_magnitude`: How much to adjust desired stock levels by
|
|
- `stock_adjustment_threshold`: Threshold for triggering adjustments
|
|
- Other system-wide configuration parameters |