we have a Django app focusing on timeline evolution visualization. There we have conceptually the relationship of:
1 Item with 1 or more Lifecycles (more for versioning purposes)
1 Lifecycle has 0..n Milestones
1 Milestone is a date stored as a string in form YYYY-MM-DD or a special tag "today", which means daily changing date (dynamic - the date was not stated, but until today is some state valid - if today is smaller then the next milestone).
The character of the data is that there are very diverse interpretations of milestones and phases in between them. Also the amount of milestones is diverse. However there seam to be used a maximum of 7 milestones. The characteristics of lifecycle records can be grouped (same amount of milestones with the same meanings).
Overall current implementation works fine, however we have issues with reporting questions such as:
Which items will hit milestones of certain characteristics in December 2015?