Sobes.tech
Назад к вопросам
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:

  1. Создаем таблицу Transactions с уникальным ключом TransactionId (суррогатный ключ — обычно автоинкремент или UUID).
  2. Создаем отдельную таблицу CashBreakdown с полями:
    • CashBreakdownId — суррогатный ключ (например, UUID или автоинкремент)
    • TransactionId — внешний ключ на Transactions
    • Denomination — номинал купюры
    • 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
);

Таким образом, данные нормализованы, нет избыточности, и каждая таблица отвечает за свою сущность.