mirror of
https://github.com/pacnpal/thrillwiki_laravel.git
synced 2025-12-20 05:31:10 -05:00
107 lines
3.8 KiB
Markdown
107 lines
3.8 KiB
Markdown
# Rides System Database Schema
|
|
|
|
## Overview
|
|
The rides system uses three primary tables to manage ride data:
|
|
1. `ride_models` - Templates for specific ride types/models
|
|
2. `rides` - Individual ride installations at parks
|
|
3. `roller_coaster_stats` - Extended statistics for roller coasters
|
|
|
|
## Implementation Details
|
|
|
|
### Migration Files
|
|
- `2024_02_25_194500_create_ride_models_table.php`
|
|
- `2024_02_25_194600_create_rides_table.php`
|
|
- `2024_02_25_194700_create_roller_coaster_stats_table.php`
|
|
|
|
### RideModels Table
|
|
- Primary key: `id`
|
|
- Base information:
|
|
- `name`: string, required
|
|
- `description`: text, default empty
|
|
- `category`: string(2), using RideCategory enum
|
|
- Relationships:
|
|
- `manufacturer_id`: nullable foreign key to manufacturers
|
|
- Constraints:
|
|
- Unique combination of manufacturer_id and name
|
|
- Manufacturer can be null (for generic models)
|
|
|
|
### Rides Table
|
|
- Primary key: `id`
|
|
- Base information:
|
|
- `name`: string, required
|
|
- `slug`: string, required
|
|
- `description`: text, default empty
|
|
- Relationships:
|
|
- `park_id`: required foreign key to parks
|
|
- `park_area_id`: nullable foreign key to park_areas
|
|
- `manufacturer_id`: nullable foreign key to manufacturers
|
|
- `designer_id`: nullable foreign key to designers
|
|
- `ride_model_id`: nullable foreign key to ride_models
|
|
- Status fields:
|
|
- `category`: string(2), RideCategory enum
|
|
- `status`: string(20), RideStatus enum
|
|
- `post_closing_status`: string(20), nullable
|
|
- `status_since`: date, nullable
|
|
- Operational dates:
|
|
- `opening_date`: date, nullable
|
|
- `closing_date`: date, nullable
|
|
- Physical characteristics:
|
|
- `min_height_in`: unsigned integer, nullable
|
|
- `max_height_in`: unsigned integer, nullable
|
|
- `capacity_per_hour`: unsigned integer, nullable
|
|
- `ride_duration_seconds`: unsigned integer, nullable
|
|
- User interaction:
|
|
- `average_rating`: decimal(3,2), nullable
|
|
- Timestamps: `created_at`, `updated_at`
|
|
- Indexes:
|
|
- Unique: [park_id, slug]
|
|
- Regular: category, status, manufacturer_id, designer_id, ride_model_id
|
|
|
|
### RollerCoasterStats Table
|
|
- Primary key: `id`
|
|
- Relationship:
|
|
- `ride_id`: unique foreign key to rides (one-to-one)
|
|
- Physical measurements:
|
|
- `height_ft`: decimal(6,2), nullable
|
|
- `length_ft`: decimal(7,2), nullable
|
|
- `speed_mph`: decimal(5,2), nullable
|
|
- `max_drop_height_ft`: decimal(6,2), nullable
|
|
- Track details:
|
|
- `inversions`: unsigned integer, default 0
|
|
- `ride_time_seconds`: unsigned integer, nullable
|
|
- `track_type`: string, default empty
|
|
- `track_material`: string(20), using TrackMaterial enum
|
|
- `roller_coaster_type`: string(20), using RollerCoasterType enum
|
|
- Train configuration:
|
|
- `launch_type`: string(20), using LaunchType enum
|
|
- `train_style`: string, default empty
|
|
- `trains_count`: unsigned integer, nullable
|
|
- `cars_per_train`: unsigned integer, nullable
|
|
- `seats_per_car`: unsigned integer, nullable
|
|
- Indexes:
|
|
- track_material
|
|
- roller_coaster_type
|
|
- launch_type
|
|
|
|
## Design Decisions
|
|
1. Used one-to-one relationship for roller_coaster_stats to ensure data integrity
|
|
2. Added proper indexes for common query patterns
|
|
3. Implemented nullable relationships where appropriate
|
|
4. Used appropriate data types for numeric values:
|
|
- decimals for measurements that need precision
|
|
- integers for whole number counts
|
|
5. Added proper cascading rules:
|
|
- rides cascade delete with park
|
|
- roller_coaster_stats cascade with ride
|
|
- other relationships set to nullOnDelete for safety
|
|
|
|
## Migration Order
|
|
The migrations are ordered to respect foreign key constraints:
|
|
1. ride_models (depends on manufacturers)
|
|
2. rides (depends on parks, park_areas, manufacturers, designers, ride_models)
|
|
3. roller_coaster_stats (depends on rides)
|
|
|
|
## Related Files
|
|
- Enum classes in app/Enums/
|
|
- Model classes (to be implemented)
|
|
- Feature documentation in memory-bank/features/RidesManagement.md |