CREATE TABLE users ( id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, email VARCHAR(255) NOT NULL UNIQUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ); -- Creating Features table CREATE TABLE IF NOT EXISTS features ( id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) UNIQUE NOT NULL, type Text NOT NULL, description TEXT, quantity BIGINT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ); -- Creating Feature Groups table CREATE TABLE IF NOT EXISTS feature_groups ( id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) UNIQUE NOT NULL, description TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ); -- Creating Features_Groups_Features table (many-to-many relationship) CREATE TABLE IF NOT EXISTS features_groups_features ( id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, feature_group_id BIGINT UNSIGNED NOT NULL, feature_id BIGINT UNSIGNED NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (feature_group_id) REFERENCES feature_groups(id) ON DELETE CASCADE, FOREIGN KEY (feature_id) REFERENCES features(id) ON DELETE CASCADE ); -- Creating Abilities table CREATE TABLE IF NOT EXISTS abilities ( id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL, user_id BIGINT UNSIGNED NOT NULL, expired_at DATETIME, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE ); -- Creating Usages table CREATE TABLE IF NOT EXISTS usages ( id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL, total BIGINT NOT NULL, spend BIGINT NOT NULL, user_id BIGINT UNSIGNED NOT NULL, expired_at DATETIME, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE ); -- Creating Consumptions table CREATE TABLE IF NOT EXISTS consumptions ( id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, usage_id BIGINT UNSIGNED NOT NULL, amount BIGINT NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (usage_id) REFERENCES usages(id) ON DELETE CASCADE );