Sobes.tech
Back to questions
Middle+
5

// [DATABASE] Спроектировать БД пользователей и их электронных кошельков. // Пользователь может владеть несколькими электронными кошельками в разных валютах, но при этом не может владеть двумя кошельками в одной валюте. // Возможные валюты: USD/EUR/RUB. Кошелёк у пользователя должен содержать текущий баланс; // Валюты должны иметь дополнительное название на русском языке.

Companies where asked
BetBoom

Answer from AI

sobes.tech AI

Для проектирования базы данных пользователей и их электронных кошельков с учётом требований можно использовать следующую структуру:

Таблицы

  1. users — хранит информацию о пользователях
  • id (PK)
  • name
  • email
  • ...
  1. currencies — справочник валют
  • code (PK) — например, 'USD', 'EUR', 'RUB'
  • name_ru — название валюты на русском (например, 'Доллар США')
  1. wallets — электронные кошельки
  • id (PK)
  • user_id (FK -> users.id)
  • currency_code (FK -> currencies.code)
  • balance (DECIMAL)

Ограничения

  • В таблице wallets необходимо обеспечить уникальность пары (user_id, currency_code), чтобы пользователь не мог иметь два кошелька в одной валюте.

Пример SQL-схемы (PostgreSQL):

CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    email VARCHAR(255) UNIQUE NOT NULL
);

CREATE TABLE currencies (
    code CHAR(3) PRIMARY KEY,
    name_ru VARCHAR(255) NOT NULL
);

CREATE TABLE wallets (
    id SERIAL PRIMARY KEY,
    user_id INT NOT NULL REFERENCES users(id),
    currency_code CHAR(3) NOT NULL REFERENCES currencies(code),
    balance NUMERIC(19,4) NOT NULL DEFAULT 0,
    CONSTRAINT unique_user_currency UNIQUE (user_id, currency_code)
);

-- Пример вставки валют
INSERT INTO currencies (code, name_ru) VALUES
('USD', 'Доллар США'),
('EUR', 'Евро'),
('RUB', 'Российский рубль');

Такой дизайн позволяет:

  • Хранить пользователей и их кошельки в разных валютах
  • Гарантировать, что у пользователя не будет двух кошельков с одинаковой валютой
  • Легко расширять список валют и хранить их русские названия

При работе с кошельками важно обеспечить корректное обновление балансов с учётом транзакций и блокировок для предотвращения гонок данных.