Мне ваш подход понятен и импонирует, но он инженерный и, конечно, правильный. Но я хочу для начала пойти в теорию.
Как раз в том проекте был у нас соблазн всё сделать по теории. Но практика показала, что соблюдение всех загогулин избыточно :о((
Суть в том, что должны быть не все возможные артефакты проекта, а лишь необходимые для решения задачи.
Цель в общем такая. Попробую обсказать на таком примере.
Предположим, что данная модель - это некая инфологическая модель. По закону трансформации я перевожу ее на уровень даталогической модели данных и далее формирую структуру данных.
Рассуждения таковы:
1. Клиент - Заказ
Клиент трансформируется в таблицу Клиенты (КодКлиента(ПК), ФИО(Not Null), Адрес(Not Null))
Заказ трансформируется в таблицу Заказы(НомерЗаказа(ПК), Дата (Инверсный ключ, Поумолчанию- Now()), КодКлиента(ВК))
Отношение неидентифицирующее. Минимальная и максимальная кардинальность на стороне таблицы Клиенты - 1
Минимальная кардинальность на стороне Заказы = 0, Максимальная - много
Процедуры поддержания целостности: тригеры на стороне родителя Каскадное обновление каскадное удаления
Т.е. имея точные правила преобразования я сумел из модели класса сформировать структуры БД. Возможно в дальнейшем у меня появятся дополнительные требования и дополнительные потребности в создания альтернативных процедур поддержания целостности
Аналогично я бы хотел иметь правила преобразования аналитической модели в проектную и некую начальную структуру классов (скелет классов). Тут вариантов больше согласен, но их не бесконеное множетсво и всегда можно объяснить почем так а не иначе добавив в начале Если, то
Есть у меня определенное ощущение, что цель искусственна.
По сути скажу, что логическая модель данных разрабатывается вне зависимости от того, будут ли ее реализовывать ОО классы, или база данных, или еще что-нибудь :о)) Поэтому в представленном Вами варианте детали реализации (типа триггеров) должны быть выкинуты.
Далее. Исходным материалом для формирования модели является всё-таки словесно-формульное описание задачи, для адептов добавлю "обычно". Довольно хорошо про это написано в книжке Баркера ("CASE*Method - Entity Relationship Modelling" by Richard Barker. (c) Copyright 1990 Oracle Corporation UK Limited (c) Перевод с английского к.т.н. Крюкова А.В., 1992. - кстати, советую почитать)
Итак, построили (нарисовали) логическую модель. Потом действительно можно тождественными преобразованиями (в том числе с использованием спецсредств) трансформировать ее в хоть в диаграмму классов, хоть в физическую модель БД. Но (!) отмечу, что это именно тождественные преобразования, т.е. логическая модель никуда не делась и, более того, не изменилась, а лишь была реализована на другом уровне. Я вообще не считаю диаграмму классов и модель БД чем-то различным - с этим можно спорить, но на мой взгляд бесполезно.
Касательно способа реализации.
"Первичная" модель делается ручками из примитивов (вспоминаем ERwin, PowerDesigner, встроенные фичи СУБД и иже с ними), так же ее можно записать в виде кода. "Трансформация" в физическую реализацию выполняется либо ручками (медленно, но при наличии нужного уровня квалификации довольно надежно), либо с помощью автоматических преобразователей (быстро, но всё равно потом надо проверять). Разумеется, из одной логической модели может быть построено много вариантов, я уж не говорю о приложениях.
ну а для поведенческих аспектов нет ничего лучше имеющихся заготовок. (врочем и у них есть минусы)
P.S. Кстати, если Ваш интерес связан с реализацией подобного автоматического преобразователя, то это похвально, но, по-моему, сейчас бессмысленно. Во всех отношениях дешевле будет использовать любой подходящий (или просто грамотного специалиста) и приноровиться к его особенностям. Причина - скорость прохождения из точки А в точку Б.
Более того, я уже делал подобную работу и на своем опыте убедился в ее трудозатратности (т.е. значительных затратах на создание инструмента) и, следовательно, недостаточной эффективности. Хотя адаптивность получается довольно высокой, я уже писал про это. Но самое важное, что кодирование никуда не девается (вспоминаем правило Парето) :о((
Более-менее приемлемый вариант получается при создании целого комплекса средств автоматизации программистского труда (RAD'ы тут не считаются). Ну а это пока несбыточная мечта, к сожалению.