MySQL-RPG-Schema
A database schema for role-playing games
Description
This repo contains a database template that could be used when designing an RPG.
There is a possibility that this schema may not fit your exact needs, but it could be used as a jump off point to get you going. Hopefully, there is enough here where you can use most of it and modify the bits and peices you need.
The schema here is intended for a MySQL database.
You may want to take into consideration using either MyISAM or Innodb. Each have their advantages and disadvantages. I've considered making these Innodb, but decided to leave that out. If you have a preference on using a particular database engine, then you may need to modify the schema.
Synopsis
The "create_tables.sql" file will have the database schema to the create tables.
The "create_history_tables.sql" file creates a history table for each table. Having history tables is intended to be optional hence being in a seperate file.
Database Tables
Below is an overview on individual database tables.
conf
Various configuration settings for your game could be held here.
Columns:
- conf_id
- name
- value
user_type
Different user types that would be associated with a "user" (not to be confused with "characters").
Columns:
- user_type_id
- name
Rows:
- name:'admin',
- name:'moderator',
- name:'player',
- name:'spectator',
user
This table holds the real world player information. Entries inside here are known as "users", which differ from "characters"
Columns:
- user_id
- user_type_id
- first_name
- last_name
- password
character_type
Different character types that are associated with a "character".
Columns:
- character_type_id
- name
Rows:
- name:'player',
- name:'non-playable',
character
Records inside here would be characters in your game. This table includes playable and non-playable characters.
Columns:
- character_id
- character_type_id
- name
- alive
- level
- xp
- money
user_character
This table links "users" to "characters". It is recomended that the character a user will associate with should have a character_type (SEE character_type) classifing the character as "player".
Columns:
- user_character_id
- user_id
- character_id
attribute
A basic list of attributes.
See this wiki article in regards to rpg attributes.
Columns:
- attribute_id
- name
- desc
Initial rows inserted:
- name:'strength', desc:'A measure of how physically strong a character is.',
- name:'constitution', desc:'A measure of how resilient a character is.',
- name:'dexterity', desc:'A measure of how agile a character is.',
- name:'intelligence', desc:'A measure of a character''s problem-solving ability.',
- name:'charisma', desc:'A measure of a character''s social skills, and sometimes their physical appearance.',
- name:'wisdom', desc:'A measure of a character''s common sense and/or spirituality.',
- name:'willpower', desc:'A measure of the character''s mental resistance.',
- name:'perception', desc:'A measure of a character''s openness to their surroundings.',
- name:'luck', desc:'A measure of a character having chance to favor him or her.',
- name: 'damage', desc: 'A measure to inflict damage',
character_attribute
This table associates attributes to characters.
Columns:
- character_attribute_id
- character_id
- attribute_id
- value
place
Used by "location", This table holds a list of place names.
Columns:
- place_id
- name
location
A list of x and y coordinates. Each record will be associated with a "place" (SEE "place" TABLE). You can have multiple location records that are of the same place.
Columns:
- location_id
- x
- y
- place_id
character_location
A list reporting where characters are at.
Columns:
- character_location_id
- character_id
- location_id
item_type
Different item types held here.
Columns:
- item_type_id
- name
- desc
item
An object that characters can use in some way.
Columns:
- item_id
- item_type_id
- name
item_attribute
This table associates items with attributes. These attributes are intended to be added to character attributes.
Columns:
- item_attribute_id
- item_id
- attribute_id
- value
item_location
A list of item locations. It is intended that if a character has an item on them, then the item will not be in this table.
Columns:
- item_location_id
- item_id
- location_id
character_item
The "character inventory", what the character has on them or perhaps in a backpack of sorts. If an item is equiped, then it is not intended to be in here. However, it is possible to have equipped items in here also.
Columns:
- character_item_id
- character_id
- item_id
equipment_slot
A list of possible slots where items can be equiped to.
Columns:
- equipment_slot_id
- name
Initial rows inserted:
- name:'head',
- name:'shoulder',
- name:'chest',
- name:'back',
- name:'wrist',
- name:'hands',
- name:'waist',
- name:'leg',
- name:'feet',
- name:'neck',
- name:'ears',
- name:'ring',
- name:'main_hand',
- name:'off_hand',
character_equipment
A list of items that are equiped to characters.
Columns:
- character_equipment_id
- equipment_slot_id
- character_id
- item_id
class
A list of classes that characters can be.
See this wiki article in regards to what rpg classes are and the different types.
Columns:
- class_id
- name
character_class
This table associates characters to a class (SEE "class" TABLE)
Columns:
- character_class_id
- character_id
- class_id
ability_type
Different ability types held here (SEE "ability" TABLE).
Columns:
- ability_type_id
- name
- desc
ability
An ability is like a special action, spell, or possible talent that characters can perform in combat.
Columns:
- ability_id
- name
- ability_type_id
class_ability
This table associates what class can do an ability.
Columns:
- class_ability_id
- class_id
- ability_id
effect_type
Different effect types held here.
Columns:
- effect_type_id
- name
- desc
Rows:
- name:'buff', desc:'A temporary benefit to a character’s attributes',
- name:'debuff', desc:'A temporary hindrance to a character’s attributes',
status_effect
A "status effect" is usually some temporary advantage or hindrance given to a character by some mean, perhaps from an ability, an item, or being at some place.
See this wiki article in regards to what rpg status effects are and examples.
Columns:
- status_effect_id
- name
- effect_type_id
- duration
- desc
character_status_effect
This table associates current status effects are on character.
Columns:
- character_status_effect_id
- character_id
- status_effect_id
- date
loot
This table lists the possible loot that can be gained.
Columns:
- loot_id
- xp
- money
character_loot
This table associates loot awarded when defeating a specific character.
Columns:
- character_loot_id
- loot_id
- character_id
item_loot
This table associates items awarded when receiving a particular loot.
The "drop_chance" column sets the chance of receiving this item. This column is intended to be a decimal number between 0 to 1 as a way to represent a percentage.
Columns:
- item_loot_id
- loot_id
- item_id
- drop_chance
entity_type
A list of basic types associated with entities.
Columns:
- entity_type_id
- name
entity
An "entity" is an alternative to the "non-playable" character type. This table is intended to have various non playable characters in your game. These could be friendly or hostile to players. They can be ugly monsters or beautiful human. It is really up to you if you want to use this table or how you want to use it.
Columns:
- entity_id
- entity_type_id
- name
- level
entity_attribute
Associates an attribute to an entity.
Columns:
- entity_attribute_id
- entity_id
- attribute_id
- value
entity_location
Gives an entity a location.
Columns:
- entity_location_id
- entity_id
- location_id
entity_class
Assign an entity to a class.
Columns:
- entity_class_id
- entity_id
- class_id
entity_status_effect
Associates a current status effect with an entity (SEE "status_effect" TABLE)
Columns:
- entity_status_effect_id
- entity_id
- status_effect_id
- date
entity_loot
Associates loot awarded when defeating a specific entity.
Columns:
- entity_loot_id
- loot_id
- entity_id
faction
A global and permenant group of characters ("playable" or "non-playable") and entities that share some idea. That idea could be political, religious, cultural, spiritual, or something different entirely.
Columns:
- faction_id
- name
character_faction
Associates a character to a faction.
Columns:
- character_faction_id
- character_id
- faction_id
entity_faction
Associates an entity to a faction.
Columns:
- entity_faction_id
- entity_id
- faction_id
rank
A list of generic rank names.
Columns:
- guild_id
- name
guild
A global and permenant group of playable characters working together.
Columns:
- guild_id
- name
guild_rank
A list of ranks associated to a particular guild.
Columns:
- guild_rank_id
- guild_id
- rank_id
character_guild
Associates a character to a guild.
Columns:
- character_guild_id
- character_id
- guild_id
- guild_leader
character_guild_rank
Associates a character to a guild_rank.
Columns:
- character_guild_rank_id
- character_id
- guild_rank_id
party
A small and likely temporary group of players trying to accomplish an objective.
Columns:
- party_id
character_party
Associates a character to a party.
Columns:
- character_party_id
- character_id
- party_id
- party_leader
title
A list of titles.
Columns
- title_id
- name
character_title
Associates a character to a title.
Columns
- character_title_id
- character_id
- title_id