awesome-everything EN
↑ Обратно к восхождению

Базы данных

Реляционная модель: тест с множественным выбором

Суть Синтез с множественным выбором по юниту реляционной модели: keys, нормальные формы, JSONB vs side-таблица, foreign key at scale, TOAST и изменение схемы без простоя.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на senior-высоте — в орбите
◷ 13 min

Шесть вопросов, проходящих сквозь весь юнит. Ни один не про заучивание определения — каждый это решение по дизайну схемы под реальными ограничениями, где неверный выбор оплачивается на миграции, а не на проектировании.

Цель

Убедитесь, что вы связываете спину юнита: keys и constraints, нормальные формы vs намеренная денормализация, JSONB vs типизированные колонки vs side-таблицы, экономика foreign key на масштабе, физическое хранение и то, как схема меняется без простоя.

Викторина

В таблице customers email используется как PRIMARY KEY. Маркетинг теперь хочет, чтобы пользователи могли менять email. В чём корневая проблема и стандартное решение?

Викторина

Таблица хранит `orders(order_id, customer_id, customer_city)`, где primary key — только `order_id`. Какую нормальную форму она нарушает и что ломается в продакшене?

Викторина

Маркетплейсу нужны свободные теги товаров, поддерживающие четыре запроса: показать теги товара, перечислить все товары с тегом X, посчитать товары по тегу и переименовать тег глобально. Какая форма хранения дёшево покрывает все четыре на масштабе?

Викторина

Senior-инженер предлагает отключить foreign keys по всей типичной B2B SaaS-схеме (таблицы до 100M строк), чтобы «улучшить производительность записи». Как читать это предложение?

Викторина

`SELECT * FROM events ORDER BY created_at DESC LIMIT 100` на таблице в 50M строк с индексом на created_at в 3× медленнее ожидаемого. В таблице JSONB-колонка payload в среднем 8KB. Наиболее вероятная причина и исправление?

Викторина

Колонку `user_name` нужно превратить в `display_name` на таблице в 50M строк, общей для многих сервисов, без простоя. Какой подход верный и почему однострочный rename неверен?

Итог

Сквозная линия юнита — одна дисциплина решений: кладите identity в неизменяемый surrogate key и охраняйте business keys через UNIQUE NOT NULL; нормализуйте до 3NF, чтобы две строки не могли разойтись, и денормализуйте только с явным согласованием; тянитесь к side-таблице в момент, когда запрашиваете с другой стороны; держите FK-constraints, пока измеренное ограничение шардинга или каскада не вынудит иначе; помните, что физическое хранение (TOAST, page layout) делает SELECT * дорогим на широких строках; и меняйте живую схему через expand-then-contract, никогда не ломая на месте. Каждый ответ здесь сводится к «проектируй под запросы и жизненный цикл, а не под первый insert».

Продолжить восхождение ↑Реляционная модель: тест с краткими ответами
хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources3
expand
  1. 01
  2. 02
  3. 03

Trademarks belong to their respective owners. Editorial reference only.