| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373 |
- CREATE TABLE data.user (
- id INT PRIMARY KEY NOT NULL,
- name TEXT NOT NULL,
- mail TEXT NOT NULL UNIQUE,
- password TEXT NOT NULL,
- api_key TEXT NOT NULL UNIQUE,
- admin INT NOT NULL DEFAULT 0 CHECK(admin IN (0, 1))
- );
- CREATE TABLE data.token (
- user INT NOT NULL REFERENCES user(id),
- token TEXT NOT NULL,
- expiry DATETIME NOT NULL
- );
- CREATE TABLE data.player(
- id INT PRIMARY KEY NOT NULL,
- user INT NOT NULL REFERENCES user(id),
- server INT NOT NULL,
- country TEXT,
- lang TEXT,
- name TEXT NOT NULL UNIQUE,
- mana INT NOT NULL CHECK (mana >= 0),
- crystal INT NOT NULL CHECK (crystal >= 0),
- level INT NOT NULL CHECK (level BETWEEN 1 AND 50),
- experience INT NOT NULL CHECK (experience >= 0),
- energy INT NOT NULL CHECK (energy >= 0),
- energy_max INT NOT NULL CHECK (energy_max >= 0),
- energy_per_min INT NOT NULL CHECK (energy_per_min >= 0),
- arena_energy INT NOT NULL CHECK (arena_energy >= 0),
- rep INT REFERENCES unit(id),
- social_point INT NOT NULL CHECK (social_point >= 0),
- honor_point INT NOT NULL CHECK (honor_point >= 0),
- guild_point INT NOT NULL CHECK (guild_point >= 0),
- darkportal_energy INT NOT NULL CHECK (darkportal_energy >= 0),
- dimension_energy INT NOT NULL CHECK (dimension_energy >= 0),
- costume_point INT NOT NULL CHECK (costume_point >= 0),
- honor_medal INT NOT NULL CHECK (honor_medal >= 0),
- honor_mark INT NOT NULL CHECK (honor_mark >= 0),
- event_coin INT NOT NULL CHECK (event_coin >= 0),
- storage_slots INT NOT NULL CHECK (storage_slots >= 0),
- island INT NOT NULL CHECK (island >= 0),
- joined TIMESTAMP,
- top_rank_arena INT DEFAULT 0,
- top_rank_world_arena INT DEFAULT 0,
- top_rank_special_league INT DEFAULT 0,
- top_rank_gw INT DEFAULT 0,
- top_rank_siege INT DEFAULT 0,
- top_rank_wboss INT DEFAULT 0,
- top_rank_toan INT DEFAULT 0,
- top_rank_toah INT DEFAULT 0,
- top_rank_toal INT DEFAULT 0,
- public INT NOT NULL DEFAULT 0 CHECK(public IN (0, 1)),
- mode INT NOT NULL CHECK(mode IN (0, 1)) DEFAULT 0,
- last_access DATETIME
- );
- CREATE TABLE data.record(
- player INT NOT NULL REFERENCES player(id),
- area_type INT NOT NULL, --REFERENCES key.area_type,
- area INT NOT NULL, --REFERENCES key.area,
- stage INT CHECK(stage >= 0),
- time INT,
- score INT,
- rank TEXT,
- PRIMARY KEY (player, area_type, area)
- );
- CREATE TABLE data.record_party(
- player INT NOT NULL REFERENCES player(id),
- area_type INT NOT NULL, --REFERENCES key.area_type,
- area INT NOT NULL, --REFERENCES key.area,
- unit INT NOT NULL REFERENCES unit(id),
- monster INT NOT NULL, --REFERENCES key.unit(id),
- leader INT NOT NULL DEFAULT 0,
- front INT NOT NULL DEFAULT 0
- );
- CREATE TABLE data.collection(
- player INT NOT NULL REFERENCES player(id),
- monster INT NOT NULL, --REFERENCES key.monster(id),
- open INT CHECK(open IN (0, 1))
- );
- CREATE TABLE data.defense(
- player INT NOT NULL REFERENCES player(id),
- area_type INT NOT NULL REFERENCES area_type(id),
- slot INT NOT NULL CHECK(slot BETWEEN 0 AND 9) DEFAULT 0,
- unit INT NOT NULL REFERENCES unit(id),
- position INT NOT NULL CHECK(position BETWEEN 1 AND 4),
- PRIMARY KEY (player, area_type, unit)
- );
- CREATE TABLE data.unit(
- player INT NOT NULL REFERENCES player(id),
- id INT PRIMARY KEY NOT NULL,
- building INT REFERENCES building(id),
- monster INT NOT NULL REFERENCES unit(id),
- level INT NOT NULL CHECK(level BETWEEN 1 AND 40),
- stars INT INT NOT NULL CHECK(stars BETWEEN 1 AND 6),
- hp INT NOT NULL CHECK(hp >= 0),
- attack INT NOT NULL CHECK(attack >= 0),
- defense INT NOT NULL CHECK(defense >= 0),
- speed INT NOT NULL CHECK(speed >= 0),
- crit_rate INT NOT NULL CHECK(crit_rate >= 0),
- crit_damage INT NOT NULL CHECK(crit_damage >= 0),
- resistance INT NOT NULL CHECK(resistance >= 0),
- accuracy INT NOT NULL CHECK(accuracy >= 0),
- experience INT NOT NULL CHECK(experience >= 0),
- exp_gained INT NOT NULL CHECK(exp_gained >= 0),
- exp_gain_rate INT NOT NULL CHECK(exp_gain_rate >= 0),
- costume INT,
- source INT, --REFERENCES key.source(id),
- create_time DATETIME NOT NULL,
- homunculus_name TEXT,
- lock INT NOT NULL CHECK(lock IN (0, 1))
- );
- CREATE TABLE data.unit_skill(
- unit INT NOT NULL REFERENCES unit(id),
- skill INT NOT NULL, --REFERENCES key.skill(id),
- level INT NOT NULL CHECK(level > 0),
- PRIMARY KEY (unit, skill)
- );
- CREATE TABLE data.rune(
- player INT NOT NULL REFERENCES player(id),
- id INT PRIMARY KEY NOT NULL,
- type INT, --REFERENCES key.rune_set(id),
- slot INT NOT NULL CHECK(slot BETWEEN 1 AND 6),
- stars INT NOT NULL CHECK(stars BETWEEN 1 AND 6),
- ancient INT NOT NULL CHECK(ancient IN (0, 1)),
- level INT NOT NULL CHECK(level BETWEEN 0 AND 15),
- quality INT NOT NULL, --REFERENCES key.quality(id),
- original_quality INT NOT NULL, --REFERENCES key.quality(id),
- value INT NOT NULL CHECK(value > 0),
- efficiency FLOAT CHECK(efficiency BETWEEN 0 AND 100),
- max_efficiency FLOAT CHECK(max_efficiency BETWEEN 0 AND 100),
- locked INT NOT NULL CHECK(locked IN (0, 1))
- );
- CREATE TABLE data.rune_stat(
- rune INT NOT NULL references rune(id),
- slot INT NOT NULL CHECK(slot BETWEEN -1 AND 4),
- stat INT NOT NULL, --REFERENCES key.rune_stat(id),
- value INT NOT NULL CHECK(value >= 0),
- enchant INT NOT NULL CHECK(enchant IN (0, 1)),
- grind INT NOT NULL CHECK(grind >= 0),
- rolls INT NOT NULL CHECK(rolls BETWEEN 0 AND 4),
- PRIMARY KEY (rune, slot)
- );
- CREATE TABLE data.unit_rune(
- unit INT NOT NULL REFERENCES unit(id),
- rune INT NOT NULL REFERENCES rune(id),
- rta INT NOT NULL DEFAULT 0 CHECK(rta IN (0, 1)),
- PRIMARY KEY(unit, rune, rta)
- );
- CREATE TABLE data.artifact(
- player INT NOT NULL REFERENCES player(id),
- id INT PRIMARY KEY NOT NULL,
- type INT, --REFERENCES key.archetype(id),
- attribute INT, --REFERENCES key.element(id),
- archetype INT, --REFERENCES key.archetype(id),
- level INT NOT NULL CHECK(level BETWEEN 0 AND 15),
- quality INT NOT NULL, --REFERENCES key.quality(id),
- original_quality INT NOT NULL, --REFERENCES key.quality(id),
- value INT NOT NULL CHECK(value >= 0),
- efficiency FLOAT NOT NULL CHECK(efficiency BETWEEN 0 AND 100),
- max_efficiency FLOAT NOT NULL CHECK(max_efficiency BETWEEN 0 AND 100),
- locked INT NOT NULL CHECK(locked IN (0, 1))
- );
- CREATE TABLE data.artifact_stat(
- artifact INT NOT NULL references artifact(id),
- stat INT NOT NULL, --REFERENCES key.artifact_stat(id),
- value INT NOT NULL CHECK(value >= 0),
- PRIMARY KEY (artifact)
- );
- CREATE TABLE data.artifact_effect(
- artifact INT NOT NULL references artifact(id),
- slot INT NOT NULL CHECK(slot BETWEEN 1 AND 4),
- effect INT NOT NULL, --REFERENCES key.artifact_effect(id),
- value FLOAT NOT NULL CHECK(value >= 0),
- enchant INT NOT NULL CHECK(enchant IN (0, 1)),
- grind INT NOT NULL CHECK(grind >= 0),
- rolls INT NOT NULL CHECK(rolls BETWEEN 0 AND 4),
- PRIMARY KEY (artifact, slot)
- );
- CREATE TABLE data.unit_artifact(
- unit INT NOT NULL REFERENCES unit(id),
- artifact INT NOT NULL REFERENCES artifact(id),
- rta INT NOT NULL DEFAULT 0 CHECK(rta IN (0, 1)),
- PRIMARY KEY(unit, artifact, rta)
- );
- CREATE TABLE data.item(
- player INT NOT NULL REFERENCES player(id),
- id INT NOT NULL, --REFERENCES key.inventory(id),
- type INT NOT NULL, --REFERENCES key.inventory_type(id),
- amount INT NOT NULL CHECK(amount >= 0)
- );
- CREATE TABLE data.summon_special(
- week DATETIME NOT NULL,
- unit INT NOT NULL, --REFERENCES key.unit(id),
- PRIMARY KEY (week, unit)
- );
- CREATE TABLE data.guild(
- id INT NOT NULL PRIMARY KEY,
- name TEXT NOT NULL,
- level INT NOT NULL CHECK(level BETWEEN 0 AND 100),
- experience NOT NULL CHECK(experience >= 0),
- recruiting NOT NULL CHECK(recruiting IN (0, 1)),
- members INT NOT NULL CHECK(level BETWEEN 0 AND 30),
- leader INT REFERENCES guild_member(id),
- comment TEXT,
- notice TEXT
- );
- CREATE TABLE data.guild_member(
- member INT NOT NULL PRIMARY KEY,
- guild INT NOT NULL REFERENCES guild(id),
- grade INT NOT NULL CHECK(grade BETWEEN 1 AND 3),
- name TEXT NOT NULL,
- level INT NOT NULL CHECK(level BETWEEN 1 AND 50),
- rating INT NOT NULL CHECK(rating >= 0),
- arena_score INT NOT NULL CHECK(arena_score >= 0),
- joined TIMESTAMP NOT NULL,
- last_login TIMESTAMP NOT NULL,
- in_war INT NOT NULL CHECK(in_war IN (0, 1)),
- has_defense INT NOT NULL CHECK(has_defense IN (0, 1))
- );
- CREATE TABLE data.enchantment(
- player INT NOT NULL REFERENCES player(id),
- id INT NOT NULL PRIMARY KEY,
- type INT NOT NULL,
- quality INT NOT NULL, --REFERENCES key.quality(id),
- rune INT NOT NULL, --REFERENCES key.rune_set(id),
- stat INT NOT NULL, --REFERENCES key.rune_stat(id),
- value INT NOT NULL CHECK(value >= 0),
- amount INT NOT NULL CHECK(amount >= 0)
- );
- CREATE TABLE data.run_party(
- run INT NOT NULL REFERENCES run(id),
- unit INT NOT NULL REFERENCES unit(id),
- monster INT NOT NULL, --REFERENCES key.unit(id),
- leader INT NOT NULL DEFAULT 0,
- front INT NOT NULL DEFAULT 0,
- PRIMARY KEY (run, unit)
- );
- CREATE TABLE data.run_drop_enchantment(
- run INT NOT NULL REFERENCES run(id),
- id INT NOT NULL,
- type INT NOT NULL, --REFERENCES key.enchantment(id), -- TODO: Duplicated??
- quality INT NOT NULL, --REFERENCES key.quality(id),
- rune INT NOT NULL, --REFERENCES key.rune_set(id),
- stat INT NOT NULL, --REFERENCES key.rune_stat(id),
- value INT NOT NULL CHECK(value >= 0)
- );
- CREATE TABLE data.run_drop_unit(
- run INT NOT NULL REFERENCES run(id),
- unit INT NOT NULL REFERENCES kunit(id),
- PRIMARY KEY (run, unit)
- );
- CREATE TABLE data.run_drop_sd(
- run INT NOT NULL REFERENCES run(id),
- unit INT NOT NULL REFERENCES kunit(id),
- PRIMARY KEY (run, unit)
- );
- CREATE TABLE data.run_drop_unit_pieces(
- run INT NOT NULL REFERENCES run(id),
- unit INT NOT NULL REFERENCES kunit(id),
- amount INT NOT NULL CHECK(amount > 0),
- PRIMARY KEY (run, unit)
- );
- CREATE TABLE data.run_drop_shapeshifting(
- run INT NOT NULL PRIMARY KEY REFERENCES run(id),
- amount INT NOT NULL CHECK(amount > 0)
- );
- CREATE TABLE data.team_unit(
- team INT NOT NULL REFERENCES team(id),
- unit INT NOT NULL REFERENCES unit(id),
- leader INT NOT NULL DEFAULT 0,
- front INT NOT NULL DEFAULT 0,
- PRIMARY KEY(team, unit)
- );
- CREATE TABLE data.run(
- player INT NOT NULL REFERENCES player(id),
- id INT NOT NULL PRIMARY KEY,
- dtime TIMESTAMP NOT NULL,
- area_type INT NOT NULL, --REFERENCES key.area_type,
- area INT NOT NULL, --REFERENCES key.area,
- stage INT CHECK(stage > 0),
- difficulty INT, --REFERENCES key.difficulty(id),
- win INT NOT NULL CHECK(win IN (0, 1)),
- time INT NOT NULL CHECK(time > 0),
- mana INT NOT NULL CHECK(mana >= 0),
- energy INT NOT NULL CHECK(energy >= 0),
- crystal INT NOT NULL CHECK(crystal >= 0),
- guild_points NOT NULL CHECK(guild_points >= 0),
- honor_points NOT NULL CHECK(honor_points >= 0),
- helper INT NOT NULL CHECK(helper IN (0, 1)),
- score INT,
- rank TEXT
- );
- CREATE TABLE data.run_drop_rune(
- run INT NOT NULL REFERENCES run(id),
- id INT NOT NULL PRIMARY KEY REFERENCES rune(id),
- type INT, --REFERENCES key.rune_set(id),
- slot INT NOT NULL CHECK(slot BETWEEN 1 AND 6),
- stars INT NOT NULL CHECK(stars BETWEEN 1 AND 6),
- ancient INT NOT NULL CHECK(ancient IN (0, 1)),
- quality INT NOT NULL, --REFERENCES key.quality(id),
- value INT NOT NULL CHECK(value > 0),
- efficiency FLOAT NOT NULL CHECK(efficiency BETWEEN 0 AND 100),
- max_efficiency FLOAT NOT NULL CHECK(max_efficiency BETWEEN 0 AND 100),
- main_stat INT NOT NULL, --REFERENCES key.rune_stat(id),
- main_stat_value INT NOT NULL CHECK(value > 0),
- innate_stat INT, --REFERENCES key.rune_stat(id),
- innate_stat_value INT CHECK(innate_stat_value >= 0),
- substat_1 INT, --REFERENCES key.rune_stat(id),
- substat_1_value INT CHECK(substat_1_value >= 0),
- substat_2 INT, --REFERENCES key.rune_stat(id),
- substat_2_value INT CHECK(substat_2_value >= 0),
- substat_3 INT, --REFERENCES key.rune_stat(id),
- substat_3_value INT CHECK(substat_3_value >= 0),
- substat_4 INT, --REFERENCES key.rune_stat(id),
- substat_4_value INT CHECK(substat_4_value >= 0)
- );
- CREATE TABLE data.run_drop_artifact(
- run INT NOT NULL REFERENCES run(id),
- id INT PRIMARY KEY NOT NULL,
- type INT, --REFERENCES key.archetype(id),
- attribute INT, --REFERENCES key.element(id),
- archetype INT, --REFERENCES key.archetype(id),
- quality INT NOT NULL, --REFERENCES key.quality(id),
- value INT NOT NULL CHECK(value >= 0),
- efficiency FLOAT CHECK(efficiency BETWEEN 0 AND 100),
- max_efficiency FLOAT CHECK(max_efficiency BETWEEN 0 AND 100),
- stat INT NOT NULL, --REFERENCES key.artifact_stat(id),
- stat_value INT NOT NULL CHECK(value > 0),
- effect_1 INT, --REFERENCES key.artifact_effect(id),
- effect_1_value INT CHECK(effect_1_value >= 0),
- effect_2 INT, --REFERENCES key.artifact_effect(id),
- effect_2_value INT CHECK(effect_2_value >= 0),
- effect_3 INT, --REFERENCES key.artifact_effect(id),
- effect_3_value INT CHECK(effect_3_value >= 0),
- effect_4 INT, --REFERENCES key.artifact_effect(id),
- effect_4_value INT CHECK(effect_4_value >= 0)
- );
- CREATE TABLE data.run_drop_item(
- run INT NOT NULL REFERENCES run(id),
- item INT NOT NULL, --REFERENCES key.inventory(id),
- amount INT NOT NULL CHECK(amount > 0),
- PRIMARY KEY (run, item)
- );
- CREATE TABLE data.team(
- player INT NOT NULL REFERENCES player(id),
- id INT NOT NULL PRIMARY KEY,
- name INT NOT NULL,
- description TEXT,
- area_type INT NOT NULL, --REFERENCES key.area_type(id),
- area INT, --REFERENCES key.area(id),
- stage INT,
- difficulty INT, --REFERENCES key.difficulty(id),
- score INT NOT NULL DEFAULT 0
- );
- CREATE TABLE data.building(
- -- No primary key, can have multiple towers
- player INT NOT NULL REFERENCES player(id),
- id INT NOT NULL,
- buildable INT NOT NULL, --REFERENCES key.buildable(id),
- gain INT NOT NULL CHECK(gain >= 0)
- );
- CREATE TABLE data.decoration(
- player INT NOT NULL REFERENCES player(id),
- id INT NOT NULL,
- decorative INT NOT NULL, --REFERENCES key.decorative(id),
- level INT NOT NULL CHECK(level > 0),
- PRIMARY KEY (player, decorative)
- );
|