Files
thrillwiki_laravel/memory-bank/models/RidesSchema.md

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