«Ядро» вашего инструмента БД должно представлять знания, которыми оно обладает, в форме, не зависящей от БД, и когда наступит время, код, специфичный для базы данных, вступит во владение и переведет эти знания в специфичный для БД DDL.
Возможно, для этого вам понадобится какое-то внедрение зависимости. Основная идея такова: ядро вашего приложения работает только с интерфейсами и никогда не знает ничего, кроме того, что объявлено в этих интерфейсах. Во время выполнения специфичные для БД объекты, реализующие эти интерфейсы, создаются и «внедряются» в ядро. Создайте, а не слепо «вызывайте» их, как любой другой набор объектов, реализующий тот же набор интерфейсов.
Если требуется поддержка другой БД, Juts создают другой набор классов, которые реализуют эти интерфейсы, и создают их во время выполнения.
Конечно, это всего лишь теория. Вы обнаружите, что между различными системами баз данных существует много нюансов, и я подозреваю, что вам будет сложно представить все это в обобщенном виде ...