Middle+
// Օգտագործողը կարող է ունենալ մի քանի էլեկտրոնային դրամապանակներ տարբեր արժույթներում, բայց նույն արժույթում երկու դրամապանակ ունենալ չի կարող: // Միջնորդավճարներ հնարավոր են՝ USD/EUR/RUB: Օգտագործողի դրամապանակը պետք է պարունակի ընթացիկ բալանս; // Արժույթները պետք է ունենան լրացուցիչ անուն ռուսերեն: // Արժույթ ավելացնել -> BTC/ETH/TON // Լեզու ավելացնել ES/FR/EN Օգտագործող { id int PK string email string } Արժույթ { code varchar(3) PK // USD, EUR, RUB name_ru string կամավոր type enum('fiat', 'crypto') } ԱրժույթներիԹարգմանություններ { } Դրամապանակ { user_id FK (Օգտագործող.id) currency_code FK (Արժույթ.code) balance decimal }
sobes.tech AI
Պատասխան AI-ից
Для реализации модели данных с учётом требований:
- Пользователь может иметь несколько кошельков, но не более одного в каждой валюте.
- Валюты имеют код, тип (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.