savagedb_bot/db_sql/create_users_table.sql

72 lines
5.2 KiB
SQL
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- SQL скрипт для создания таблицы пользователей
-- Сохраняет все данные о пользователе, передаваемые Telegram через aiogram
CREATE TABLE bot_users (
-- Основные данные пользователя Telegram
id NUMBER(19) PRIMARY KEY, -- Telegram user ID (64-bit integer)
first_name VARCHAR2(256) NOT NULL, -- Имя пользователя
last_name VARCHAR2(256), -- Фамилия пользователя (опционально)
username VARCHAR2(128), -- Username (опционально)
language_code VARCHAR2(10), -- Код языка (IETF language tag)
-- Флаги статуса пользователя
is_bot NUMBER(1) DEFAULT 0 NOT NULL, -- Является ли пользователь ботом
is_premium NUMBER(1) DEFAULT 0, -- Telegram Premium пользователь
added_to_attachment_menu NUMBER(1) DEFAULT 0, -- Добавил ли бота в меню вложений
-- Системные поля для аудита
first_interaction_date DATE DEFAULT SYSDATE NOT NULL, -- Дата первого взаимодействия
last_interaction_date DATE DEFAULT SYSDATE NOT NULL, -- Дата последнего взаимодействия
interaction_count NUMBER(10) DEFAULT 1 NOT NULL, -- Количество взаимодействий
-- Дополнительные бизнес-поля
is_active NUMBER(1) DEFAULT 1 NOT NULL, -- Активен ли пользователь
is_blocked NUMBER(1) DEFAULT 0 NOT NULL, -- Заблокирован ли пользователь
registration_source VARCHAR2(50) DEFAULT 'bot', -- Источник регистрации
-- Финансовые данные
total_payments NUMBER(10,2) DEFAULT 0, -- Общая сумма платежей в звездах
successful_payments_count NUMBER(8) DEFAULT 0, -- Количество успешных платежей
-- Системные поля
created_at DATE DEFAULT SYSDATE NOT NULL,
updated_at DATE DEFAULT SYSDATE NOT NULL
);
-- Создание индексов для оптимизации поиска
CREATE INDEX idx_bot_users_username ON bot_users(username);
CREATE INDEX idx_bot_users_language ON bot_users(language_code);
CREATE INDEX idx_bot_users_last_interaction ON bot_users(last_interaction_date);
CREATE INDEX idx_bot_users_is_premium ON bot_users(is_premium);
CREATE INDEX idx_bot_users_created_at ON bot_users(created_at);
-- Создание комментариев к таблице и полям
COMMENT ON TABLE bot_users IS 'Таблица пользователей Telegram бота с полными данными KYC';
COMMENT ON COLUMN bot_users.id IS 'Уникальный идентификатор пользователя Telegram (64-bit)';
COMMENT ON COLUMN bot_users.first_name IS 'Имя пользователя в Telegram';
COMMENT ON COLUMN bot_users.last_name IS 'Фамилия пользователя в Telegram (опционально)';
COMMENT ON COLUMN bot_users.username IS 'Username пользователя в Telegram (опционально)';
COMMENT ON COLUMN bot_users.language_code IS 'Код языка пользователя (IETF language tag)';
COMMENT ON COLUMN bot_users.is_bot IS 'Флаг: является ли пользователь ботом (0/1)';
COMMENT ON COLUMN bot_users.is_premium IS 'Флаг: Telegram Premium пользователь (0/1)';
COMMENT ON COLUMN bot_users.added_to_attachment_menu IS 'Флаг: добавил ли бота в меню вложений (0/1)';
COMMENT ON COLUMN bot_users.first_interaction_date IS 'Дата первого взаимодействия с ботом';
COMMENT ON COLUMN bot_users.last_interaction_date IS 'Дата последнего взаимодействия с ботом';
COMMENT ON COLUMN bot_users.interaction_count IS 'Общее количество взаимодействий с ботом';
COMMENT ON COLUMN bot_users.is_active IS 'Флаг: активен ли пользователь (0/1)';
COMMENT ON COLUMN bot_users.is_blocked IS 'Флаг: заблокирован ли пользователь (0/1)';
COMMENT ON COLUMN bot_users.registration_source IS 'Источник регистрации пользователя';
COMMENT ON COLUMN bot_users.total_payments IS 'Общая сумма платежей пользователя в Telegram Stars';
COMMENT ON COLUMN bot_users.successful_payments_count IS 'Количество успешных платежей';
-- Создание триггера для автоматического обновления updated_at
CREATE OR REPLACE TRIGGER trg_bot_users_updated_at
BEFORE UPDATE ON bot_users
FOR EACH ROW
BEGIN
:NEW.updated_at := SYSDATE;
END;
/
-- Создание последовательности для системных нужд (если потребуется)
CREATE SEQUENCE seq_bot_users_internal START WITH 1 INCREMENT BY 1 NOCACHE;