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

3.8 KiB

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)
  • Enum classes in app/Enums/
  • Model classes (to be implemented)
  • Feature documentation in memory-bank/features/RidesManagement.md