SQL Database Design Relationship Choices
I would personally design it such that there was one more table called ShiftCategoryLocations (or named something a little more user friendly) that had every logical combination of ShiftId, CategoryId, and LocationId. It would also have its own primary key ShiftCategoryLocationId (or whatever name made more sense) so that your WorkHourLog table could reference the 3 dimensions easily by only having a foreign key relationship on ShiftCategoryLocationId. This is known as a dimensions combinations table.
While for small data you could definitely recreate the relations as needed in the application side, but the most efficiency will be if it existed in the database. It also is more reusable and readable in a sense by being refactored into one place, the database.