For most purposes (e.g. determining confirmation status or propagation of transactions) it does not matter which transaction is where.
Inside a bundle, however, it is at some places clearly mandated which transaction has to be the trunk transaction and the branch transaction (e.g. when signatures are split between multiple transactions, they have to be ...
A bundle consisting of N transactions can reference 2*N completely different transactions (almost half of them will belong to the bundle). The chain of trunkTransaction references must form the correct bundle, branchTransaction fields can reference tails (transactions with currentIndex = 0) of any other bundles.
Current implementation of the tip selection ...
I found the cheat sheet to be somewhat misleading as it assumes, that one tip to be confirmed is the latest solid milestone. You'll find a precise answer here. I had the exact same conceptual question. Make sure you read all comments!
As I'm new to Iota development I can not tell, if this is really the correct way to do it but I found the following works for me and the result looks correct and like what I expected it to look like:
After requesting all transactionObjects from the confirmed Tips (like I discribed in my question) I go ahead and get the bundle for each transaction:
Although the construction seems a bit odd, now I understand this specific setup was just temporary. In a new release (current v18.104.22.168) the new bundle structure will adhere to the "each tx confirms 2 others"-philosophy. So if a bundle consists of N tx it will confirm 2*N other tx. (N-1) of these point to internal tx (to chain the tx together) and (N+1) point ...
okay I think I can answer my own question with this data:
bundle DFZCQK has 4 transactions: [VYWRBV, RZKOLU, USOBTT, H9OOFC]
tx0 points to RZKOLU (in) and MJOTMK (out)