mirror of
https://github.com/pacnpal/thrillwiki_laravel.git
synced 2025-12-20 13:51:11 -05:00
3.8 KiB
3.8 KiB
Rides System Database Schema
Overview
The rides system uses three primary tables to manage ride data:
ride_models- Templates for specific ride types/modelsrides- Individual ride installations at parksroller_coaster_stats- Extended statistics for roller coasters
Implementation Details
Migration Files
2024_02_25_194500_create_ride_models_table.php2024_02_25_194600_create_rides_table.php2024_02_25_194700_create_roller_coaster_stats_table.php
RideModels Table
- Primary key:
id - Base information:
name: string, requireddescription: text, default emptycategory: 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, requiredslug: string, requireddescription: text, default empty
- Relationships:
park_id: required foreign key to parkspark_area_id: nullable foreign key to park_areasmanufacturer_id: nullable foreign key to manufacturersdesigner_id: nullable foreign key to designersride_model_id: nullable foreign key to ride_models
- Status fields:
category: string(2), RideCategory enumstatus: string(20), RideStatus enumpost_closing_status: string(20), nullablestatus_since: date, nullable
- Operational dates:
opening_date: date, nullableclosing_date: date, nullable
- Physical characteristics:
min_height_in: unsigned integer, nullablemax_height_in: unsigned integer, nullablecapacity_per_hour: unsigned integer, nullableride_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), nullablelength_ft: decimal(7,2), nullablespeed_mph: decimal(5,2), nullablemax_drop_height_ft: decimal(6,2), nullable
- Track details:
inversions: unsigned integer, default 0ride_time_seconds: unsigned integer, nullabletrack_type: string, default emptytrack_material: string(20), using TrackMaterial enumroller_coaster_type: string(20), using RollerCoasterType enum
- Train configuration:
launch_type: string(20), using LaunchType enumtrain_style: string, default emptytrains_count: unsigned integer, nullablecars_per_train: unsigned integer, nullableseats_per_car: unsigned integer, nullable
- Indexes:
- track_material
- roller_coaster_type
- launch_type
Design Decisions
- Used one-to-one relationship for roller_coaster_stats to ensure data integrity
- Added proper indexes for common query patterns
- Implemented nullable relationships where appropriate
- Used appropriate data types for numeric values:
- decimals for measurements that need precision
- integers for whole number counts
- 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:
- ride_models (depends on manufacturers)
- rides (depends on parks, park_areas, manufacturers, designers, ride_models)
- 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