Jake,
I think it's times like this where "has" is over-used in ORM predicates. I agree with Ken that a credit card doesn't have an address. Not in the same way that I live at an address or that my computer is assigned an IP address. However, I think it's fair to say that a credit card has its bill sent to a given address regardless of whether the person to whom the credit card is assigned actually lives there. I had that problem pop up a few years ago, which is another story entirely...
In my (limited) experience, when you're making an ORM schema it's a balancing act to decide which perspective you're viewing the Universe of Discourse from. Ken lives in a people-centric world where systems care
Bernd,
NORMA has what I'm told is a relatively simple way to add model extensions. You can then record metadata about your object types and fact types, and then you could code an XSL transform based on that metadata to handle the denormalization for you. The XSL is still an ugly process, but that way you can continue making your conceptual changes without having to hand-code all of your performance tweaks each time you regenerate the database schema.
If you wanted to go that route, you could maybe add a "denormalize me" attribute to "Address". Then write an XSL to modify the OIAL output. From our chat the other day, you could insert your transform between the ORM to OIAL and the OIAL to DCIL transforms. The down side is that you'd be dealing with reams of undocumented schemas. Ugh.
Currently, all the DDL is generated using XSLT. I'd really like to see direct transforms based on ORM queries, but that's a ways down the road. We need a good ORM2 meta-model (in ORM-- it exists in Microsoft's DSL tools framework at the moment) and a conceptual query language to make that work. There's a conceptual query implementation planned to start this summer, so maybe check back then.
Until then, I continue to sheepishly denormalize my databases by saying, "Person has primary- Phone", "Person has secondary- Phone", etc.