from:http://community.dynamics.com/forums/t/22361.aspx
There are several mechanisms for reflection in AX: UtilElements (including UtilIdElements - limited but fast for query-based approach), TreeNode (allows you to work with any AOT node and any available property of it), and Dict-classes (DictType, DictTable, DictClass, etc).
UtilElements table represents application objects in the AOD-files (see also
New Layers in Dynamics AX 2009 for details on how an UtilElements.RecId maps to an offset in an AOD file).
AX uses an internal database format to store application elements in AOD-files (though application metadata is
promised to be moved to SQL database in "AX6") - the same as it uses for temporary tables when they're backed by files due to size limitation. UtilElements and UtilIdElements
represent AOD-files as a database - that's why you can't find them in your AX SQL database.
From the point of view of reflection mechanisms project nodes are not accessible through UtilElements/UtilIdElements or Dict-classes - they are only accessible through TreeNode descendants: ProjectNode, ProjectGroupNode and ProjectListNode. But when you delete a project - all its nodes are also deleted because they are contained in a project like form controls contained in a form or report controls contained in a report.
Note that UtilElements represent application objects with the level of detail necessary to support multiple layers, for instance, a class/table/map instance/static method can be created/modified on a layer that differs from the layer where that class/table/map has been created - and you get specific UtilElementType values (and separate UtilElements records) for such methods. On the other hand a form or report instace method cannot be modified on an "upper" layer separately from the form/report itself (in case of modification the whole form/report is copied to an "upper" layer) - that's why you only have UtilElementTypes for a form/report as a whole. The same is with projects...