You’re absolutely right. We need to redeploy Parent when an organisation upgrades and we need to preserve the mapping there.
In reality, we archive that by using another EternalStorage which is attached to the Parent and not a mapping (which I put there for simplicity and trying to focus on Organisation contract). And because EternalStorage is already explained as an approach.
In fact we don’t have any mappings in our source as we cannot iterate over them (unless you use some specific implementation such as Chris Seth’s itterable mapping).
So effectively this data structure
mapping(bytes32 => address) public organisations;
is modelled as follows in Parent contract EternalStorage instance:
sha3("OrganisationKey", bytes32 organisationKey) -> uint index
sha3("OrganisationIndex", uint index) -> address colony address
for example, in EternalStorage, this maybe stored as follows
sha3("Adventure Works") = 138
sha3(138) = "0xd91cf6dac04d456edc5fcb6659dd8ddedbb26661"
I realise I may have oversimplified the examples thus losing some of this content. Thanks for the great question :)