  Model-driven engineering is the automatic production of software artefacts
from abstract models of structure and functionality. By targeting a specific
class of system, it is possible to automate aspects of the development process,
using model transformations and code generators that encode domain knowledge
and implementation strategies. Using this approach, questions of correctness
for a complex, software system may be answered through analysis of abstract
models of lower complexity, under the assumption that the transformations and
generators employed are themselves correct. This paper shows how formal
techniques can be used to establish the correctness of model transformations
used in the generation of software components from precise object models. The
source language is based upon existing, formal techniques; the target language
is the widely-used SQL notation for database programming. Correctness is
established by giving comparable, relational semantics to both languages, and
checking that the transformations are semantics-preserving.
