The new ce_address table should have its own abstraction, which is responsible for reads and writes. For now we only really need the "writes" part, since addresses are only read when looking up events, and for performance this should happen in a single query within EventStore. Potential interface:
interface AddressStore { /** * Given a full address, returns its ID in the ce_address table, creating a new record if necessary. */ public function acquireFullAddressID( string $address ): int; }