Назад к вопросам
Junior
12
Разложи JSON в третью нормальную форму: как бы ты хранил список CashBreakdown и как генерировал бы суррогатные ключи
Компании, где спрашивали
МодульБанк
Ответ от нейросети
sobes.tech AI
Чтобы разложить JSON с полем CashBreakdown в третью нормальную форму (3NF), нужно устранить избыточность и зависимости между неключевыми атрибутами.
Предположим, у нас есть JSON с таким полем:
{
"TransactionId": 123,
"Date": "2024-06-01",
"CashBreakdown": [
{"Denomination": 100, "Count": 5},
{"Denomination": 50, "Count": 10}
]
}
Как хранить список CashBreakdown:
- Создаем таблицу
Transactionsс уникальным ключомTransactionId(суррогатный ключ — обычно автоинкремент или UUID). - Создаем отдельную таблицу
CashBreakdownс полями:CashBreakdownId— суррогатный ключ (например, UUID или автоинкремент)TransactionId— внешний ключ наTransactionsDenomination— номинал купюрыCount— количество купюр
Так мы отделяем повторяющиеся элементы списка в отдельную таблицу, избегая хранения массивов в одном поле.
Генерация суррогатных ключей:
- Для
TransactionIdиCashBreakdownIdможно использовать:- Автоинкрементные целочисленные ключи (например, SERIAL в PostgreSQL)
- UUID (особенно если нужна глобальная уникальность и распределенность)
Пример создания таблиц в SQL:
CREATE TABLE Transactions (
TransactionId SERIAL PRIMARY KEY,
Date DATE NOT NULL
);
CREATE TABLE CashBreakdown (
CashBreakdownId SERIAL PRIMARY KEY,
TransactionId INT REFERENCES Transactions(TransactionId),
Denomination INT NOT NULL,
Count INT NOT NULL
);
Таким образом, данные нормализованы, нет избыточности, и каждая таблица отвечает за свою сущность.