Итак, суть в том, что есть различные решения для каждой проблемы, и правильное решение будет зависеть от контекста: не существует единого подхода, подходящего для всех.
Например, для номера три у нас есть таблица, в которой поддерживается уникальный счетчик идентификаторов для каждого типа (одна строка для каждого типа сущности): когда вы хотите указать идентификатор, выберите текущее значение для типа, а затем увеличьте его в базе данных. Это простое решение, но оно не так хорошо масштабируется: если вы хотите улучшить его, вы можете сделать так, чтобы прикладной уровень массово распределял нагрузку по этим идентификаторам (скажем, 50 для каждого типа), а затем раздавал их по мере необходимости, когда вставка новых данных, возвращение в БД только после исчерпания пула. По сути, это эмуляция чего-то вроде последовательности Oracle .
Для номера четыре каждый класс сущности (классы, которые обертывают одну таблицу), который связан с другим типом сущности, отвечает за каскадное удаление и т. Д.
В конце концов, ORM - это просто абстракция, так что, если вы загляните внутрь, все эти проблемы были решены разработчиками библиотеки. В этом случае вам просто нужно сделать работу!