For generic "shops", I'd say that there's a pretty good reason to separate the daily opening hours by week into another table: some shops are restaurants that open for lunch, close during the afternoon, then re-open for dinner. Your original design where you assumed that shops open once a day cannot model that.
On the other hand, I don't think it is useful to separate the opening and closing times into different rows. I would see "shop_hours" as modeling time periods denoted by the opening and closing times, rather than a particular "shop opening/closing time", which is what NogDog's design looks like.