Database Schema
This chapter will explain the implementation details of QuickShop Hikari's database storage format.
Tables
This section explains the database tables created by QuickShop-Hikari.
Unless otherwise specified, the initial qs_ in table name is the table prefix.
For the latest code definition for each table, see: DataTables.java
data
This data table stores all the existing store data on this server or the store data that has been deleted but is still referenced in a specific form, and does not contain coordinate information.
No matter what, a data record should not be modified after it is created, until it got deleted.
Any new changes to the shop should create a new copy, apply the changes to the copy, and insert it as a new record.
Basiclly, Copy-on-write.
A data record only be deleted from the database when no any table references their data_id.
| Column Name | DataType | Default | Description |
|---|---|---|---|
| id | INT UNSIGNED Primary Key | Auto Increment | Record ID (aka. data_id) |
| owner | VARCHAR(36) NOT NULL | N/A | The shop owner unique id (aka. UUID) |
| item | TEXT NOT NULL | N/A | YAML serialized ItemStack for this shop data entry |
| type | INT NOT NULL | 0 | The shoptype id, Indicates the store type |
| currency | VARCHAR(64) | NULL | The currency name for this shop data entry. NULL if using Vault or not supported |
| price | DECIMAL(32,2) NOT NULL | N/A | The price per stack for this shop data entry |
| unlimited | BIT NOT NULL | 0 | Indicates whether this store is an unlimited store, 0=Limited, 1=Unlimited |
| hologram | BIT NOT NULL | 0 | Indicates the suspension status of this store's display item, 0=Follow global settings, 1=Disabled |
| tax_account | VARCHAR(36) | NULL | The uuid for tax account, If it is not NULL, tax will be paid to the specified account |
| permissions | MEDIUMTEXT | Empty Json | Indicates the override status of the store player permission group, serilized to JSON string |
| extra | LONGTEXT | Empty Yaml | Used to store experimental settings of QuickShop Hikari or persistent data of other plugins |
| inv_wrapper | VARCHAR(255) NOT NULL | N/A | Unique identifier for InventoryWrapper for this shop data entry |
| inv_symbol_link | TEXT NOT NULL | N/A | Unique Inventory symbol used to pass to InventoryWrapper, for locating inventory |
| create_time | DATETIME NOT NULL | Dataset Insert Time | Indicates when this store was created |
| benefit | MEDIUMTEXT | N/A | Setup of Benefit Allocation after JSON Serialization |
shops
This table is used to store shop to shop data mapping, so that shop ID will not change when shop data changes.
Multiple shop_id can correspond to the same data_id.
| Column Name | DataType | Default | Description |
|---|---|---|---|
| id | INT UNSIGNED Primary Key | Auto Increment | Record ID (aka. shop_id) |
| data_id | INT UNSIGNED NOT NULL | N/A | Data Record ID (aka. data_id) |
shop_map
This table is used to store shop_id to shop location in Bukkit mapping. At the same time, this is also the key record of loading the store into the game world.
| Column Name | DataType | Default | Description |
|---|---|---|---|
| world | VARCHAR(32) NOT NULL | N/A | The world name in Bukkit |
| x | INT NOT NULL | N/A | The block X position for this shop |
| y | INT NOT NULL | N/A | The block Y position for this shop |
| z | INT NOT NULL | N/A | The block Z position for this shop |
messages
This table is used to store offline messages.
| Column Name | DataType | Default | Description |
|---|---|---|---|
| id | INT UNSIGNED Primary Key | Auto Increment | Record ID |
| receiver | VARCHAR(36) NOT NULL | N/A | The unique id for receiver |
| time | DATETIME | Dataset Insert Time | The time that this message created |
| content | MEDIUMTEXT NOT NULL | N/A | Serialized Adventure Component |
metadata
This table is used to store the metadata, e.g database schema version.
| Column Name | DataType | Default | Description |
|---|---|---|---|
| key | VARCHAR(255) NOT NULL Primary Key | N/A | The key |
| value | LONGTEXT NOT NULL | N/A | The value |
player
This table is used to store the player data, e.g locales.
| Column Name | DataType | Default | Description |
|---|---|---|---|
| uuid | VARCHAR(36) NOT NULL Primary Key | N/A | The player unique id |
| locale | VARCHAR(255) NOT NULL | N/A | The player's client locale |
| cachedName | VARCHAR(255) NOT NULL | N/A | The player's username last known |
external_cache
This table is stored cached shop space/stock for WebUI or what else other pure database apps.
| Column Name | DataType | Default | Description |
|---|---|---|---|
| shop | INT UNSIGNED NOT NULL Primary Key | N/A | The id of shop (aka. shop_id) |
| stock | INT NOT NULL | N/A | The stock for this shop |
| space | INT NOT NULL | N/A | The space for this shop |
log_purchase
This table records all history purchases activities on this server.
| Column Name | DataType | Default | Description |
|---|---|---|---|
| id | INT UNSIGNED Primary Key | Auto Increment | Record ID |
| time | DATETIME NOT NULL | Dataset Insert Time | The time that this purchase created |
| shop | INT UNSIGNED NOT NULL | N/A | The shop id (aka. shop_id) |
| data | INT UNSIGNED NOT NULL | N/A | The data id (aka. data_id) |
| buyer | VARCHAR(36) NOT NULL | N/A | The purchaser unique id, In fact, it is more accurate to call it a purchaser, not only selling but also buying |
| type | VARCHAR(32) NOT NULL | N/A | The ShopType enum name |
| amount | INT NOT NULL | N/A | Purchased stack amount |
| money | DECIMAL(32,2) NOT NULL | N/A | Total balance in this purchase |
| tax_amount | DECIMAL(32,2) NOT NULL | 0 | The tax in this purchase |
log_transaction
TODO
log_changes
TODO
log_others
TODO