I've just asked this exact same question on stackoverflow so apologies for cross posting but I only just noticed dba so thought I'd ask across here as well.
I'm just about to start putting together a schema for a system that will have recurring events and keep going through different options. None of which seem ideal.
The requirements are that I need to store the events and the pattern by which they occur I also need to be able to query this data with a specific date to determine if the date/time specified is covered by any of these events.
An example that demonstrates the functionality I am after works along the lines of a train time lookup system.
I'd like to be able to insert the time at which a train departs for a specific journey. Say 10am every day Monday – friday.
Then I would like to be able to query this data set to see if any trains are leaving at 10am (with 15 minutes leeway either side so 9:45 – 10:15) on Wednesday 30th April 2014.
I keep going backwards and forwards on this without making any real progress so any ideas would be much appreciated.
Edit :
My initial thoughts on the table are as so:
The issue with this is that it is very static in it only allows for 24 hour granularity for the frequency of the trips. Ideally a system that allowed me to enter a start date and altering periods between trips would be the optimal solution. So for example, once a month, once a fortnight etc.
Best Answer
Let's say you made the table like this
Next, you insert into the table the event
Here is that INSERT query
OK, now let's see how you can query the following departure
Here is that SELECT query
EPILOGUE
Given your initial idea, you could change the station_arr_id and station_dep_id into a single route_id and store the routes in a route table
You could also make the event record arrivals and departures separately.
I am just giving ideas. I'll leave it to you to implement. Perhaps, to give you some UI ideas, see the site I use to commute : http://as0.mta.info/mnr/schedules/sched_form.cfm . The result of the route you pick in that site shows route departures within a 5-hour window (2.5 hours before and 2.5 hours after).
Give it a Try !!!