A pervasive problem in software architecture is to design systems in which multiple representations of related data are tightly integrated. The problem is that integration inhibits the decomposition of systems into cohesive and independent modules. We present a general solution that is applicable in many domains. We cast data representations as independent modules and the behavioral relationships that integrate them as separate, cohesive "mediator" modules. We show that abstract data type-based modules do not support such decompositions, and that implicit invocation by itself does not provide much additional help. We then introduce abstract behavioral types (ABTs) as a basis for modules, and show that ABTs are suited to representing both the data to be integrated and the relationships needed to integrate them. To guide software architects in using behavioral abstractions, we present behavioral entity-relationship modeling as a new architectural style. We discuss applications to a variety of environments and tools.