mirror of
https://github.com/sonr-io/sonr.git
synced 2026-08-02 17:31:39 +00:00
45 lines
1.8 KiB
SQL
45 lines
1.8 KiB
SQL
-- +goose Up
|
|
-- +goose StatementBegin
|
|
CREATE TABLE accounts (
|
|
id TEXT PRIMARY KEY,
|
|
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
deleted_at TIMESTAMP WITH TIME ZONE,
|
|
number INTEGER NOT NULL,
|
|
sequence INTEGER NOT NULL DEFAULT 0,
|
|
address TEXT NOT NULL,
|
|
public_key JSONB NOT NULL,
|
|
chain_id TEXT NOT NULL,
|
|
block_created INTEGER NOT NULL,
|
|
controller TEXT NOT NULL,
|
|
label TEXT NOT NULL,
|
|
handle TEXT NOT NULL,
|
|
is_subsidiary BOOLEAN NOT NULL DEFAULT FALSE,
|
|
is_validator BOOLEAN NOT NULL DEFAULT FALSE,
|
|
is_delegator BOOLEAN NOT NULL DEFAULT FALSE,
|
|
is_accountable BOOLEAN NOT NULL DEFAULT TRUE
|
|
);
|
|
|
|
|
|
-- Unique constraints
|
|
CREATE UNIQUE INDEX idx_accounts_address_unique ON accounts(address) WHERE deleted_at IS NULL;
|
|
CREATE UNIQUE INDEX idx_accounts_handle_controller_unique ON accounts(handle, controller) WHERE deleted_at IS NULL;
|
|
|
|
-- Regular indexes for query performance
|
|
CREATE INDEX idx_accounts_chain_id ON accounts(chain_id);
|
|
CREATE INDEX idx_accounts_block_created ON accounts(block_created);
|
|
CREATE INDEX idx_accounts_label ON accounts(label);
|
|
CREATE INDEX idx_accounts_controller ON accounts(controller);
|
|
CREATE INDEX idx_accounts_number ON accounts(number);
|
|
CREATE INDEX idx_accounts_is_subsidiary ON accounts(is_subsidiary) WHERE is_subsidiary = TRUE;
|
|
CREATE INDEX idx_accounts_is_validator ON accounts(is_validator) WHERE is_validator = TRUE;
|
|
CREATE INDEX idx_accounts_is_delegator ON accounts(is_delegator) WHERE is_delegator = TRUE;
|
|
CREATE INDEX idx_accounts_deleted_at ON accounts(deleted_at) WHERE deleted_at IS NOT NULL;
|
|
-- +goose StatementEnd
|
|
|
|
-- +goose Down
|
|
-- +goose StatementBegin
|
|
DROP TABLE accounts;
|
|
-- +goose StatementEnd
|
|
|