implementing project management and event types

I am implemented a simple project management application. Each project has various events, and each event can be a different type. Some event information is common, such as name, start date, close date, and comments. I have a projects table which has_many events. My plan is to have several sub-event tables, like event_get_access which will contain an event_id field to link it to table events as well as information specific to a "get access" event (remote access, username, passwords, etc). Another event type might be "upgrade" which stores information about the server to be upgraded, etc.

So I have: * a project which has_many events * events which belongs_to :project * sub-events which belong_to :event

How do the subevents relate to event? An event will never have more than one subevent, but it may not have any of a particular subevent.

Thanks for your help on this?

May be my

may be my option wrong. if I do your project i will do this.

  • a project which has_many events

  • events which belongs_to :project

event has_one sub_event

option II

  • a project which has_many events
  • events which belongs_to :project

sub_event has column “sub_event_id”. it just refer the sub_event table

Have you looked at Single Table Inheritance, which would allow multiple types of event all in one table (rather than have subevents of different types)?

Otherwise I think you could have Event has_one :sub_event_type_one has_one :sub_event_type_two and so on.

Then SubEventTypeOne belongs_to :event etc.

It does not matter if a particular event does not have a particular type of subevent, if you try to access event.sub_event_type_one and it does not have one then you will get nil


Sorry for the delay -- I forgot to subscribe to the thread and didn't realize I had responses until I checked manually.

I thought about STI, but it seems that I would have a very complex table. I did not realize, however, that I could include a bunch of has_one statements -- I assumed that since an event would have a particular subevent based on the event_type, that the has_one wouldn't work. Since it will (just have to check for nil and know which event_type I'm working with), I think your second opinion would work.