Модель данных на собеседовании аналитика
Обычно дают предметную область словами и просят набросать модель прямо на встрече. Смотрят не на красоту схемы, а на вопросы, которые ты задаёшь по ходу: может ли договор быть без клиента, меняется ли тип клиента со временем, что делать с накопленными данными при изменении структуры.
Что спрашивают
- +Моделирование: чем сущность отличается от атрибута и что прячется за связью многие-ко-многим
- +Нормализация: какие аномалии она убирает и когда денормализация оправдана
- +Ключи: почему номер паспорта плохой первичный ключ и что делать с каскадным удалением
- +Типы: деньги, время с часовым поясом, справочники вместо свободного текста, NULL против пустой строки
- +Миграции: приём расширить-сжать, тихая потеря точности и пакетная обработка больших таблиц
Из чего состоит тема
Так тема разложена в тренажёре: движок ведёт прогресс по каждой подтеме отдельно и возвращает те, где вы ошибаетесь.
- Ключи и связи13
- Типы данных и справочники13
- ER-моделирование12
- Миграции и совместимость12
- Нормализация12
Разборы подтем
Конспект по каждой: что это, как отвечать вслух, на чём валятся, плюс вопросы для самопроверки.
- ER-моделирование12 вопросов
- Нормализация12 вопросов
- Ключи и связи13 вопросов
- Типы данных и справочники13 вопросов
- Миграции и совместимость12 вопросов
Примеры вопросов с разбором
- Как отличить сущность от атрибута?A)У сущности есть собственные свойства и жизньB)Атрибут содержит только числовые значенияC)Сущность пишут с заглавной буквыD)Сущность обязательно связана с тремя другими
показать ответ и разбор
+A)У сущности есть собственные свойства и жизнь// разбор: Если у понятия появляются собственные свойства, история и правила изменения, это сущность. «Город» как строка в адресе — атрибут; «Город» со справочником, кодом региона и признаком активности — уже сущность. Решение принимают по тому, что с этим понятием нужно делать, а не по его размеру.
- Что обеспечивает внешний ключ?A)Уникальность значений в столбцеB)Автоматическое заполнение поляC)Ссылочную целостность между таблицамиD)Шифрование связанных данных
показать ответ и разбор
+C)Ссылочную целостность между таблицами// разбор: Внешний ключ не даёт сослаться на несуществующую запись и определяет, что произойдёт при удалении родителя: запретить, обнулить ссылку или удалить каскадом. Для аналитика это прямой вопрос к бизнесу: что должно случиться с заказами, если клиента удаляют.
- Почему новую колонку обычно добавляют необязательной?A)Так требует синтаксис большинства СУБДB)Так колонка занимает меньше местаC)Обязательные колонки индексируются медленнееD)Иначе старые строки нечем заполнить
показать ответ и разбор
+D)Иначе старые строки нечем заполнить// разбор: Обязательная колонка требует значения для каждой уже существующей строки, а осмысленного значения для прошлых записей обычно нет. Стандартный путь в три шага: добавить необязательной, заполнить историю по согласованному правилу, затем сделать обязательной. Каждый шаг едет отдельным релизом.
- Что нарушает первую нормальную форму?A)Список телефонов в одном поле через запятуюB)Отсутствие внешнего ключа у таблицыC)Хранение вычисляемого итога заказаD)Использование составного первичного ключа
показать ответ и разбор
+A)Список телефонов в одном поле через запятую// разбор: Первая нормальная форма требует атомарности значений: в ячейке одно значение, а не список. Строка «+7900…, +7901…» ломает поиск, проверку формата и связи, потому что база видит текст, а не два телефона. Лечится отдельной сущностью контактов.
- В каком типе хранят денежные суммы?A)В числе с плавающей точкой двойной точностиB)В десятичном типе с фиксированной точкойC)В строке произвольной длиныD)В целом числе без указания валюты
показать ответ и разбор
+B)В десятичном типе с фиксированной точкой// разбор: Десятичный тип хранит значение точно, поэтому суммирование не накапливает погрешность. Плавающая точка даёт расхождения на копейки, которые бухгалтерия замечает первой. Отдельно фиксируют валюту: сумма без валюты — неполный факт, особенно если система однажды выйдет за пределы одной страны.
- Что такое связующая (ассоциативная) сущность?A)Сущность без единого атрибутаB)Сущность, раскрывающая связь многие-ко-многимC)Копия сущности для целей отчётностиD)Сущность, хранящая только исторические данные
показать ответ и разбор
+B)Сущность, раскрывающая связь многие-ко-многим// разбор: Связь многие-ко-многим в реляционной модели разворачивается в отдельную сущность с ключами обеих сторон. Почти всегда у неё обнаруживаются собственные атрибуты: позиция заказа хранит количество и цену на момент покупки, участие сотрудника в проекте — роль и период.
- Чем естественный ключ отличается от суррогатного?A)Естественный несёт смысл предметной областиB)Суррогатный обязательно составнойC)Естественный не может быть уникальнымD)Суррогатный виден пользователю в интерфейсе
показать ответ и разбор
+A)Естественный несёт смысл предметной области// разбор: Естественный ключ — значение из жизни: ИНН, номер паспорта, артикул. Суррогатный придуман системой и смысла не несёт. Проблема естественных ключей в том, что жизнь меняется: номер паспорта заменяют, артикул переназначают, а ключ должен быть вечным.
- Что означает обратно совместимая миграция?A)Её можно откатить одной командойB)Она выполняется без остановки базыC)Предыдущая версия кода работаетD)Она не меняет объём занятого места
показать ответ и разбор
+C)Предыдущая версия кода работает// разбор: Совместимость определяется по работающему коду: при постепенном обновлении старые и новые экземпляры приложения живут одновременно. Добавление необязательной колонки безопасно, а удаление или переименование — нет, потому что старая версия обратится к исчезнувшему полю и упадёт.
- В таблице заказов хранятся название и адрес клиента. Чем это грозит?A)Адрес разъедется между заказамиB)Замедлится добавление новых заказовC)Заказы будут дольше сохранятьсяD)Сломается сортировка по дате заказа
показать ответ и разбор
+A)Адрес разъедется между заказами// разбор: Дублирование атрибутов клиента в каждом заказе означает, что при переезде придётся править все строки. Часть обновится, часть нет, и на вопрос «какой адрес у клиента» появится несколько ответов. Правильный ход — ссылка на клиента; отдельный вопрос, надо ли фиксировать адрес доставки на момент заказа.
это 9 из 62
Ещё 53 вопросов по теме — в тренажёре, с движком повторения
Прочитать разбор и ответить самому — разные навыки. В Сеньорчике вопросы идут сессиями, а движок возвращает подтемы, где вы ошибаетесь, пока они не начнут отскакивать. Бесплатно, лимит по энергии.
Частые вопросы
Бизнес просит удалять клиента, но платежи нужны в отчётности. Как быть?
Мягкое удаление: пометка неактивности вместо стирания. Под словом «удалить» обычно имеется в виду «убрать из работы». Отдельно решается вопрос персональных данных — там нужно обезличивание, при котором факт операции остаётся.
Как переименовать колонку в большой рабочей таблице?
Приёмом расширить-сжать: добавить новую, писать в обе, перенести накопленное пакетами, переключить чтение и только потом удалить старую. Каждый шаг совместим с обеими версиями кода, поэтому в любой момент можно остановиться.