Testrun is the representation of the whole test result. The test this testrun represents may implement more phases (one testrun may contain 0..* phases) - All we worry about in test phase is it's name and result).
If one needs to encapsulate more testruns into one (merely imaginary) unit, it's possible to aggregate those testruns using Job (one job may contain 0..* Testruns).
Each test may return additional data (in key-value format) which it needs to store (e.g. compose date, envra,...) - TestrunData is the place to store these.