In the ColdFusion world these days we've got a variety of database abstraction tools to work with.
At one end we've got Steve Bryant's DataMgr which is a "Data Access Layer (DAL)" and is amazingly compact at under 50KB of code. And even with that little amount of code, DataMgr still does something most of the ORM tools don't and that's create tables. That feature is really useful for creating install scripts and/or upgrade scripts and the CFeMmy winning Savvy Content Manager is installed and upgraded using those features. But although it is somewhat robust, with less than 50KB of code, it certainly lacks features that other database tools have (and deliberately so). You will find no actual object-mapping (DAO or ActiveRecord) in DataMgr because it's not desiged to be an ORM tool. So if you want to create those things, you have to build them from scratch.
At the other end of the spectrum is one of the few other CF tools that will create database tables: the FarCry Framework. FarCry is... NOT compact. The zip archive of FarCry 5 is 11MB COMPRESSED and about 30MB once you've extracted it. But aside from the Godzilla-size footprint, FarCry also takes a very different approach to database management than the other tools. Where the most popular database tools for ColdFusion assume that you will create a database schema first and then use the tool to map objects to that schema, FarCry insists that you focus only on the objects and let it build the schema in FarCry's own way. According to FarCry if you're thinking about the database, then you're doing something wrong. Don't like UUID's? Too bad, 'cause the primary key on your table is going to be a UUID column called "objectid" (irrespective of the name of the table).
Each of these systems has advantages and drawbacks. What FarCry lacks in portability it makes up for in features. What DataMgr lacks in features it makes up for in portability. Though ultimately I think both DataMgr and FarCry represent the extreme ends of the spectrum with DataMgr seeking to be "light weight" and FarCry seeking to be "full featured". In between you have a handful of other ORM tools that are between 1MB and 2MB in terms of the footprint of the code. The most popular of them are Mark Mandel's Transfer ORM and Doug Hughes Reactor ORM. Yet neither of those tools offer any methods of installing database tables like DataMgr or FarCry. They both asume that you will have a pre-built database schema and then ask you to write some XML to tell them which tables to use and how they're related.
Which means that right now, DataFaucet is the only ORM tool for ColdFusion that will go both ways. It will allow you to use an existing database schema, or it will build the schema for you, it's your choice. It provides the object abstractions that DataMgr lacks while at the same time providing the flexible table-creation abilities that Transfer and Reactor lack, without the overhead (or restrictions) of FarCry. Yesterday I spent most of my day actually working on providing a bit more abstraction in DataFaucet, moving from using XML to define tables for installation to allowing you to use CFPROPERTY tags in much the same way they're used in FarCry.
Here's a sample from the DataFaucet documentation:
<cfproperty name="productid" type="uuid" required="true" key="1" />
<cfproperty name="productname" type="string" required="true" length="100*" />
<cfproperty name="productdescription" type="string" required="false" length="long*" />
<cfproperty name="productprice" type="numeric" required="true" length="real" />
<!--- create a foreign key constraint to ensure this product is placed in a category --->
<cfproperty name="categoryid" type="uuid" required="true" references="tblProductCategory.CategoryID" />
<cfset setTable("tblProduct") />
Compare this to a sample from FarCry:
<cfproperty name="title" type="string" default="" hint="Super hero title." />
<cfproperty name="teaser" type="string" default="" hint="Mini intro for super hero biography." />
<cfproperty name="biography" type="longchar" default="" hint="Super hero biography." />
<cfproperty name="secretIdentity" type="string" default="" hint="Super hero secret identity." />
<cfproperty name="lAlias" type="string" default="" hint="Comma separated list of alternative titles for the super hero." />
<cfproperty name="sidekick" type="uuid" default="" hint="Super hero sidekick." />
<cfproperty name="catHero" type="string" default="" hint="Category of hero." />
<cfproperty name="apowers" type="array" default="" hint="Array of superhuman powers." />
Unlike the FarCry example where CFPROPERTY tags are the only access to database schema, the same tags in the DataFaucet example are only syntax sugar built on top of existing XML-based table definitions. If the sugary abstraction isn't enough, if you need or want views or stored procedures, you can easily move from CFPROPERTY to creating the XML yourself. Also unlike FarCry you don't have to "deploy" this object from a "webtop" to install the tables -- all you have to do is instantiate one and the database tables will be created automatically.
The catch? You have to create the form yourself. :)