Every Trip has a name and at least one Route
Every Trip has an identity and every Route has a name, a reference to the trip and an internal identity
Route can have one or more Leg; a Leg has a Date and an internal identity + A Route can't have two Leg with same Data
A Leg has a Location; a Location has a name and a Point + Point has coordinates and the logic for distance calculation