Что такое наследование
Что проверяют
Для аналитика вопрос не про синтаксис, а про моделирование предметной области: отличаете ли вы частный случай сущности от отдельной сущности с похожим набором полей, и понимаете ли, во что обходится иерархия в требованиях и в базе.
Как отвечать
Наследование это обобщение и специализация: подтип получает все свойства и поведение надтипа и добавляет своё. Проверка одна: подтип обязан подходить всюду, где по требованиям ожидается надтип. Если в описании появляются оговорки вида «кроме документов такого-то вида», иерархия выбрана неверно.
Где это встречается в работе аналитика:
- модель предметной области: договор и его виды, платёж и его способы, документ и его типы;
- права доступа: роль наследует разрешения базовой роли и добавляет свои;
- настройки: значение задаётся на уровне организации, переопределяется на уровне подразделения, затем пользователя. Здесь обязательно нужно описать, чем «не задано» отличается от «задано пустым»;
- шаблоны и справочники, где частное уточняет общее.
Способ хранения иерархии тоже требование, и вариантов три: все подтипы в одной таблице с необязательными колонками, общая таблица плюс таблица на каждый подтип, полностью самостоятельные таблицы. Первый вариант дёшев и грязен, второй даёт целостность ценой соединений.
Полезно отдельно сказать про роли: сотрудник, который одновременно является клиентом, это не множественное наследование, а два отношения к одному человеку.
Где спотыкаются
Строят иерархию по признаку, который в бизнесе меняется. Тип обслуживания или категория клиента оформляются подтипами, и каждый новый вид требует доработки и релиза, хотя должен был быть строкой справочника.
Путают отношения «является» и «имеет». Сотрудник не является отделом, у отдела есть сотрудники, и из этой подмены вырастают модели, которые не ложатся ни на процесс, ни на таблицы, а замечают это уже на этапе разработки.
Рисуют обобщение в модели и не пишут словами, что именно наследуется, что переопределяется и что происходит с уже созданными объектами при изменении надтипа. Разработчик додумывает сам, и в каждом подтипе получается своя логика.