// Пользователь может владеть несколькими электронными кошельками в разных валютах, но при этом не может владеть двумя кошельками в одной валюте.

Для реализации модели данных с учётом требований:

Короткий ответ

Что ответить на собеседовании

Для реализации модели данных с учётом требований:

Подробный разбор

Ответ с пояснениями

Условие

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

// ADD Currency -> BTC/ETH/TON // ADD язык ES/FR/EN

User { id int PK string email string }

Currency { code varchar(3) PK // USD, EUR, RUB name_ru string optional type enum('fiat', 'crypto') }

CurrencyTranslations {

}

Wallet { user_id FK (User.id) currency_code FK (Currency.code) balance decimal }

Ответ

Для реализации модели данных с учётом требований:

  • Пользователь может иметь несколько кошельков, но не более одного в каждой валюте.
  • Валюты имеют код, тип (fiat или crypto) и названия на разных языках.

Предлагается следующая структура:

User {
  id INT PRIMARY KEY,
  name VARCHAR(255),
  email VARCHAR(255)
}

Currency {
  code VARCHAR(3) PRIMARY KEY, -- USD, EUR, RUB, BTC, ETH, TON
  type ENUM('fiat', 'crypto')
}

CurrencyTranslations {
  currency_code VARCHAR(3) REFERENCES Currency(code),
  language_code VARCHAR(2), -- ru, en, es, fr и т.д.
  name VARCHAR(255),
  PRIMARY KEY (currency_code, language_code)
}

Wallet {
  user_id INT REFERENCES User(id),
  currency_code VARCHAR(3) REFERENCES Currency(code),
  balance DECIMAL(18, 2),
  PRIMARY KEY (user_id, currency_code) -- гарантирует уникальность валюты на пользователя
}

Объяснение:

  • В таблице Currency хранятся все валюты с их типом.
  • В CurrencyTranslations для каждой валюты и языка хранится название, например, для USD на русском "Доллар США".
  • В Wallet связь многие-ко-многим между пользователем и валютой с ограничением уникальности по (user_id, currency_code), чтобы пользователь не имел два кошелька в одной валюте.

Добавление новых валют (BTC, ETH, TON) и языков (ES, FR, EN) происходит через добавление записей в соответствующие таблицы Currency и CurrencyTranslations.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее