🗄️ SQL и базы данных  ·  20 вопросов  ·  ~41 мин  ·  ⏱ Таймер 41:00  ·  Сложный  · 

JSON в реляционной базе

Полуструктурированные данные рассматриваются не как повод сложить всё в один столбец, а как инструмент для полей с меняющимся составом. Задания требуют различать json и jsonb, извлекать скаляры без путаницы типов, разворачивать массивы, обновлять отдельный путь, проверять структуру и выбирать индекс под реальный оператор поиска.

Отвечено: 0 из 20
⏱ --:--
0%
💡 Инструкция: Выбери один ответ из четырёх. В тесте 20 вопросов и 41 минут. После завершения откроются общий процент, четыре тематические шкалы, правильные ответы и разбор каждого задания.
Вопрос 1 из 20
Какие данные разумнее оставить обычными столбцами, а не переносить в attributes jsonb?
Вопрос 2 из 20
Почему jsonb обычно удобнее json для фильтрации и индексирования в PostgreSQL?
SQL
CREATE TABLE products (attributes jsonb NOT NULL DEFAULT '{}'::jsonb);
Вопрос 3 из 20
Что не так со схемой, где имя клиента, email, статус заказа и все позиции хранятся одним jsonb?
Вопрос 4 из 20
Столбец data уже объявлен jsonb NOT NULL. Как гарантировать, что в документе есть строковый ключ currency?
Вопрос 5 из 20
В документе tags — массив строк. Какой вариант сохраняет именно массив, а не строку с квадратными скобками?
Вопрос 6 из 20
Что вернёт оператор -> в этом запросе?
SQL
SELECT '{"city":"Moscow"}'::jsonb -> 'city';
Вопрос 7 из 20
Почему условие price = 100 не сработает после извлечения через ->>?
SQL
SELECT data->>'price' AS price_text FROM offers;
Вопрос 8 из 20
Как извлечь вложенный postal_code сразу как text?
Вопрос 9 из 20
Что делает оператор ? в выражении data ? 'discount'?
SQL
SELECT id FROM offers WHERE data ? 'discount';
Вопрос 10 из 20
Ключ address уже существует и содержит JSON-объект. Как изменить только address.city, сохранив остальные ключи?
Вопрос 11 из 20
Как найти документы, содержащие пару status=paid?
Вопрос 12 из 20
Почему LIKE по data::text может дать ложное совпадение?
SQL
WHERE data::text LIKE '%paid%'
Вопрос 13 из 20
Как получить по одной строке на каждый элемент массива tags?
Вопрос 14 из 20
Что произойдёт, если напрямую привести data->>'age' к integer, а в одном документе лежит "не указано"?
SQL
SELECT (data->>'age')::integer FROM profiles;
Вопрос 15 из 20
Как найти товары, у которых массив tags содержит строку sale?
Вопрос 16 из 20
Какой индекс чаще всего помогает условиям вида attributes @> ...?
Вопрос 17 из 20
Запрос всегда фильтрует по (attributes->>'sku') = $1. Что может быть точнее общего GIN?
Вопрос 18 из 20
Почему индекс по всему jsonb может оказаться дорогим для часто меняющегося документа?
Вопрос 19 из 20
Почему индекс выражения должен повторять выражение запроса?
SQL
CREATE INDEX ix_email_ci ON users (lower(profile->>'email'));
SELECT * FROM users WHERE lower(profile->>'email') = lower($1);
Вопрос 20 из 20
Что следует сделать перед добавлением большого GIN-индекса?

Ответьте на все 20 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу