57 lines
1.9 KiB
SQL
57 lines
1.9 KiB
SQL
CREATE DATABASE IF NOT EXISTS argent_registry
|
|
CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci;
|
|
USE argent_registry;
|
|
|
|
CREATE TABLE shards (
|
|
shard_id INT PRIMARY KEY AUTO_INCREMENT,
|
|
name VARCHAR(50) NOT NULL,
|
|
db_name VARCHAR(50) NOT NULL,
|
|
host_address VARCHAR(255) NOT NULL,
|
|
port INT NOT NULL DEFAULT 53096
|
|
) ENGINE=InnoDB;
|
|
|
|
CREATE TABLE user_shard_map (
|
|
user_id BINARY(16) PRIMARY KEY,
|
|
username VARCHAR(50) UNIQUE NOT NULL,
|
|
name VARCHAR(50) NOT NULL,
|
|
password_hash VARCHAR(255) NOT NULL,
|
|
shard_id INT NOT NULL,
|
|
is_active TINYINT(1) NOT NULL DEFAULT 1,
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (shard_id) REFERENCES shards(shard_id)
|
|
) ENGINE=InnoDB;
|
|
|
|
CREATE TABLE cost_group_statuses (
|
|
status_id TINYINT PRIMARY KEY,
|
|
name VARCHAR(20) UNIQUE NOT NULL
|
|
) ENGINE=InnoDB;
|
|
|
|
CREATE TABLE cost_groups (
|
|
group_id BINARY(16) PRIMARY KEY,
|
|
name VARCHAR(100) NOT NULL,
|
|
created_by BINARY(16),
|
|
status_id TINYINT NOT NULL DEFAULT 1,
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (created_by) REFERENCES user_shard_map(user_id),
|
|
FOREIGN KEY (status_id) REFERENCES cost_group_statuses(status_id)
|
|
) ENGINE=InnoDB;
|
|
|
|
CREATE TABLE group_roles (
|
|
role_id TINYINT PRIMARY KEY,
|
|
name VARCHAR(20) UNIQUE NOT NULL
|
|
) ENGINE=InnoDB;
|
|
|
|
CREATE TABLE group_members (
|
|
group_id BINARY(16),
|
|
user_id BINARY(16),
|
|
role_id TINYINT DEFAULT 3,
|
|
joined_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (group_id, user_id),
|
|
FOREIGN KEY (group_id) REFERENCES cost_groups(group_id),
|
|
FOREIGN KEY (user_id) REFERENCES user_shard_map(user_id),
|
|
FOREIGN KEY (role_id) REFERENCES group_roles(role_id)
|
|
) ENGINE=InnoDB;
|
|
|
|
INSERT INTO cost_group_statuses (status_id, name) VALUES (1, 'active'), (2, 'settled'), (3, 'archived');
|
|
INSERT INTO group_roles (role_id, name) VALUES (1, 'owner'), (2, 'editor'), (3, 'participant');
|