Thanks, Yeggeps, for the list of requirements.
This is a revised answer based on your requirements. Of course, there is no holy grail for schemes, but I would like to motivate my answer before the revision (keeping a flat structure easy to query and maintain) with some sample data + queries based on your list of requirements. I repeat, I am not saying that this is the best solution, but it is a solution that is easy to request and easy to maintain (imho).
The code is a little quick and dirty, apologies. Data:
[
Show opening hours and exceptional dates:
What libraries are open today?
It outputs as follows:
Library lib1 opening hours:
Admittedly, the disadvantage of my proposed solution is that it does not take into account each requirement in a single request.
source share