I thought it could be about the same (because data has to be looked up in both cases) or probably 2 times as long (if the case with foreign keys is more favorable because Sql Server knows there are matches in the joined tables for each purchase).
It is obvious the data will always be looked up with a simple queryplan through the primary keys.
At first I wasn't aware that every record would be read several times.
I don't know if keeping the data in memory is more favorable in one layout than in another layout.