You are right I have about the link between ItineraryDetails.ToCityID and Cities.City.
I have redesigned it to look like this what do you think?
Hmmmm... I think it's actually looking a bit
less normalized in this form - the tables detailing trips, hotels and taxis are all pretty similar in structure - that's often a case of your data suggesting that you combine them into a single, multi-purpose table - maybe 'ItineraryEvents' - where you might just have an event type field (Hotel stay, taxi ride, flight, etc) to define what type of data is on that row.
I don't think it would be particularly bad, in that case, to have fields that are only relevant/populated for some event types, and left blank for others - arrival date/time, for example, is more relevant for a flight than a taxi ride.
Doing it that way permits more flexibility when new kinds of itinerary event arrive on the scene - and they will - people will start travelling by bus instead of taxi, or might need to catch a ferry, or stay overnight in a sleeper car on a train, rather than a hotel... - if it's just a new event type for your table, it's easy to accommodate - if you have to add a new table for it, it's a nightmare.