Data Model - cressie176/Load64 GitHub Wiki
┌────────────────────────────────────────┐ ┌───────────────────────────────┐ ┌─────────────────────────────────────────────────────────────────┐
│ │ │ │ ╱│ │
│ LoadC64Configuration │ │ ThirdPartyCatalogue │┼○───────────────────○─│ ThirdPartyCatalogueEntry │
│ │ │ │ ╲├─────────────────────────────────────────────────────────────────┤
├────────────────────────────────────────┤ ├───────────────────────────────┤ │ │
│ │ │ │ │ id: integer [pk] │
│ game_directory: text [required] │ │ id: integer [pk] │ │ game_id: integer [fk, unique(1)] │
│ server: text │ │ name: text [unique, required] │ │ catalogue_id: integer [fk, unique(1)] │
│ show_spashscreen: boolean [required] │ │ │ │ catalogue_entry_id: integer [unique(ThirdParty), required] │
│ │ │ │ │ │
└────────────────────────────────────────┘ │ │ └─────────────────────────────────────────────────────────────────┘
└───────────────────────────────┘ ╲│╱
○
│
│
│
┌────────────────────────────────────┐ │ ┌───────────────────────────────┐ ┌────────────────────────────────────┐
│ │ │ ╱│ │╲ │ │
│ System │──┼──────┐ │ ┌────────────────○─│ GameCompilationEntry │─○────────────┼│ GameCompilation │
│ │ │ │ │ ╲│ │╱ │ │
├────────────────────────────────────┤ │ │ │ ├───────────────────────────────┤ ├────────────────────────────────────┤
│ │ │ │ │ │ │ │ │
│ id: integer [pk] │ │ │ │ │ id: integer [pk] │ │ id: integer [pk] │
│ name: systems [unique, required] │ │ │ │ │ game_id: integer [fk] │ │ name: text [unique, required] │
│ binary: text │ │ │ │ │ game_compilation_id: integer │ │ │
│ │ │ │ │ │ │ └────────────────────────────────────┘
└────────────────────────────────────┘ │ │ │ └───────────────────────────────┘
│ │ │
│ │ │
│ │ │
○ │ │
╱│╲ ┼ ┼
┌───────────────────────────────────────────┐ ┌────────────────────────────────────────────────┐ ┌────────────────────────────────────┐ ┌─────────────────────────────────────────────┐
│ │╲ │ │ │ │ ╱│ │
│ GameControl │─○──────────────────────────────────────────────────────────────────────────────────────────────────────────────┼│ Game │┼──────────────────────────────────────┼│ ROMSet │─────────────┼──│ ROM │
│ │╱ │ │ │ │ ╲│ │
├───────────────────────────────────────────┤ ├────────────────────────────────────────────────┤ ├────────────────────────────────────┤ ├─────────────────────────────────────────────┤
│ │ │ │ │ │ │ │
│ id: integer [pk] │ │ id: integer [pk] │ │ id: integer [pk] │ │ id: integer [pk] │
│ game_id: integer [fk, required] │ │ title: text [required] │ │ game_id: integer [fk] │ │ romset_id: integer [fk] │
│ name: text [unique(game_id), required] │ │ sort_title: text [required] │ │ signature: text [unique, required] │ │ label: text [unique(ROMSet), required] │
│ description: text │ │ slug: text [unique, required] │ │ │ │ order: integer [unique(ROMSet), required] │
│ │ │ year: integer │┼───────────────────────┐ └────────────────────────────────────┘ │ hash: text [unique(ROMSet), required] │
└───────────────────────────────────────────┘ │ publisher: text │ │ │ filename: text [unique(ROMSet), required] │
┼ ┼ ┌──────────┼│ notes: text │ │ │ │
○ │ │ │ system_id: integer [fk, required] │ │ └─────────────────────────────────────────────┘
│ │ │ │ colour_encoding: colour_encodings [required] │ │
│ └────────────────────────────┐ │ │ true_drive_emulation: boolean [required] │ │
│ │ │ │ │ │
│ ○ │ └────────────────────────────────────────────────┘ │ ┌──────────────────────────────────────────────────┐
│ ╱│╲ │ ┼ │ ╱│ │
│ ┌─────────────────────────────────────────┐ ┌───────────────────────────────────┐ │ │ └───────────────────────────────────────────────────────────────────○─│ Media │
│ │ │╲ │ │╲ │ │ ╲│ │
│ │ PlayerControl │─○─────────┼│ Player │─○─────────┘ │ ├──────────────────────────────────────────────────┤
│ │ │╱ │ │╱ │ │ │
│ ├─────────────────────────────────────────┤ ├───────────────────────────────────┤ │ │ id: integer [pk] │
│ │ │ │ │ │ │ game_id: integer [fk, required] │
│ │ id: integer [pk] │ │ id: integer [pk] │ │ │ subject: media_subjects [unique(Game), required] │
│ │ game_action_id: integer [fk, required] │ │ game_id: integer [fk] │ │ │ filename: text [required] │
│ │ player_id: integer [fk, required] │ │ port: integer [unique(Game)] │ │ │ │
│ │ │ │ │ │ └──────────────────────────────────────────────────┘
│ └─────────────────────────────────────────┘ └───────────────────────────────────┘ └──────────────────────────────────────────────────────────────────────────────┐
│ ┼ │
│ ○ │
│ │ │
│ ┌───────────────────────────┘ │
│ │ │
○ ○ │
╱│╲ ╱│╲ │
┌───────────────────────────────────────────────┐ │
│ │ │
│ GameControlAssignment │ │
│ │ │
├───────────────────────────────────────────────┤ ┼
│ │ ┌───────────────────────────┐
│ id: integer [pk] │ │ │
┌──────┼│ game_control_id: integer [fk, required(1)] │┼─────┐ ┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────○┼│ LaunchConfiguration │┼○─────────────────────────────────────────────────────────────────────────┐
│ │ player_control_id: integer [fk, required(1)] │ │ │ │ │ │
│ │ │ │ │ ├───────────────────────────┤ │
│ └───────────────────────────────────────────────┘ │ │ │ │ ┌────────────────────────────────────────────┐ │
│ │ │ ┌────────────────────────────────────────────────────────────────────────────┐ │ game_id: integer [pk, fk] │ ╱│ │ │
│ │ │ │ │ │ │┼○──────────────────○─│ ProfileSelection │ │
│ │ │ │ ControllerControl │ │ │ ╲│ │ │
│ │ │ │ │ └───────────────────────────┘ ├────────────────────────────────────────────┤ │
○ ○ │ ├────────────────────────────────────────────────────────────────────────────┤ ┼ │ │ │
╱│╲ ╱│╲ │ │ │ ○ │ id: integer [pk] │ │
┌─────────────────────────────────────────────────────┐ ┌────────────────────────────────────────────────────────┐ │ │ id: integer [pk] │ │ │ launch_configuration_id: id [fk, required] │ │
│ │ │ │ │ │ controller_family_id: integer [fk, required(1)] │ │ │ profile_id: integer [fk, required] │ │
│ SystemKeyAssignment │ │ JoystickActionAssignment │ │ │ controller_id: integer [fk, required(1)] │ │ │ │ │
│ │ │ │ │ │ name: text [unique(ControllerFamily), unique(Controller), required] │ │ └────────────────────────────────────────────┘ │
├─────────────────────────────────────────────────────┤ ├────────────────────────────────────────────────────────┤ │ │ event: text [required] │ │ ╲│╱ │
│ │ │ │ │ │ canonical_name: canonical_control_names [required] │ │ ○ │
│ id: integer [pk] │ │ id: integer [pk] │ │ │ │ │ │ │
│ game_control_assignment_id: integer [fk, required] │ │ game_control_assignment_id: [fk, required] │ │ └────────────────────────────────────────────────────────────────────────────┘ │ │ │
│ system_key: system_keys [required] │ │ joystick_action: joystick_actions [required] │ │ ╲│╱ ╲│╱ ○ │ │
│ │ │ │ │ ○ ○ ╱│╲ │ │
├─────────────────────────────────────────────────────┤ │ │ │ │ │ ┌─────────────────────────────────────────────────────┐ ┼ │
│ │ ├────────────────────────────────────────────────────────┤ │ │ │ │ │ ┌───────────────────────────────┐ │
│ A system key may only be assigned once per game for │ │ │ │ │ │ │ ViceArgument │ │ │ │
│ game controls, and once per player for player │ │ A joystick action may only be assigned once per game │ │ │ │ │ │ │ Profile │ │
│ controls │ │ for game controls, and once per player for player │ │ ┼ ┼ ├─────────────────────────────────────────────────────┤ │ │ │
│ │ │ controls │ │ ┌───────────────────────────────┐ ┌───────────────────────────────────────────┐ │ │ ├───────────────────────────────┤ │
└─────────────────────────────────────────────────────┘ │ │ │ │ │ ╱│ │ │ id: integer [pk] │ │ │ │
┼ └────────────────────────────────────────────────────────┘ │ │ ControllerFamily │───────────○─│ Controller │ │ profile_id: integer [fk, required(1)] │╲ │ id: integer [pk] │ │
○ ┼ │ │ │ ╲│ │ │ launch_configuration_id: integer [fk, required(1)] │─○────────────○┼│ name: text [unique, required] │ │
│ ○ │ ├───────────────────────────────┤ ├───────────────────────────────────────────┤ │ name: text [required] │╱ │ default: boolean [required] │ │
│ │ │ │ │ │ │ │ value: text │ │ │ │
│ │ │ │ id: integer [pk] │ │ id: integer [pk] │ │ │ ├───────────────────────────────┤ │
○ ○ │ │ name: text [required, unique] │ │ controller_family: integer [fk] │ └─────────────────────────────────────────────────────┘ │ │ │
╱│╲ ╱│╲ │ │ default: boolean [required] │ │ hardware_guid: text [required, unique] │ │ There can be at most one │ │
┌────────────────────────────────────────────────────────────────────────────────────────────────────────┐ │ │ │ │ name: text [required, unique] │ │ default profile │ │
│ │ │ ├───────────────────────────────┤ │ │ │ │ │
│ ControllerControlAssignment │ │ │ │ └───────────────────────────────────────────┘ └───────────────────────────────┘ │
│ │ │ │ There can be at most one │ ┼ ┼ ┼ │
├────────────────────────────────────────────────────────────────────────────────────────────────────────┤ │ │ default controller family │ ○ ○ ○ │
│ │ │ │ │ │ │ │ │
│ id: integer [pk] │ │ └───────────────────────────────┘ │ │ │ │
│ system_key_assignment_id: integer [fk, required(1)] │ │ ┼ │ │ │ │
│ joystick_action_assignment_id: integer [fk, required(1)] │ │ ○ │ │ │ │
│ canonical_control_name: canonical_control_names [unique(GameControl), unique(PlayerControl), required] │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
└────────────────────────────────────────────────────────────────────────────────────────────────────────┘ │ │ │ │ │ │
│ ○ ○ │ │ │
│ ╱│╲ ╱│╲ │ │ │
│ ┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ │ │ │
│ ╱│ │╲ │ │ │
└──────○─│ EnvironmentVariable │─○────────────────────────────────────────────────────────────────────────┘ │ │
╲│ │╱ │ │
├───────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤ │ │
│ │ │ │
│ id: integer [pk] │ │ │
│ profile_id: integer [fk, required(1)] │ ○ ○
│ launch_configuration_id: integer [fk, required(1)] │ ╱│╲ ╱│╲
│ controller_family_id: integer [fk, required(1)] │ ┌─────────────────┴────────────────────────────────────────────────────────────┐
│ controller_id: integer [fk, required(1)] │ │ │
│ name: text [unique(Profile), unique(LaunchConfiguration), unique(ControllerFamily), unique(Controller), required] │ │ KeyMapping │
│ value: text │ │ │
│ │ ├──────────────────────────────────────────────────────────────────────────────┤
└───────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ │ │
│ id: integer [pk] │
│ profile_id: integer [fk, required(1)] │
│ launch_configuration_id: integer [fk, required(1)] │
│ host_key: host_keys [required, unique(Profile), unique(LaunchConfiguration)] │
│ system_key [required] │
│ │
└──────────────────────────────────────────────────────────────────────────────┘