Вопросы к собеседованию (#1)
Вопрос про реляционным БД. Уровень - продвинутый. Однозначно верного ответа на вопрос по ходу дела нет, но интересен ход мысли интервьюируемого.
Дано: трех звенная архитектура - клиент, load balancer, несколько stateless серверов, реляционная БД (пусть будет postgres, но критично)
В БД есть таблицы school и subject
У subject поле school_id может быть null - это значит, что предмет относится ко всем школам ассоциации школ. Если school_id не null значит предмет специфичен только для этой школы.
Надо реализовать ограничение:
Нельзя создавать предмет с именем совпадающим с другим предметом для данной школы или с другим предметом в рамках ассоциации.
Например:
У школы id:42 есть предмет "математика викингов" - нельзя создавать еще один предмет "математика викингов" для этой же школы. Но другие школы такой предмет создавать могут
Есть предмет "геометрия" у которого school_id is null. Т.е. предмет относится ко всем школам. В таком случае нельзя создать еще один предмет "геометрия" ни в ассоциации, ни в одной из школ. Это имя полностью уникально.
Вопрос: Как собственно такое ограничение реализовать. Какие есть возможные варианты.
Бонус: В плюс идет вопрос кандидата - "что делать если у школы есть предмет геометрия и теперь такой предмет надо сделать на уровне ассоциации".