It depends what the context is... If we were talking a family history database that works like most GEDCOM based programs, with the ability to create custom events, then I tend to go for a custom attribute "Military History", whose value is the name of the unit served in. The rest goes into narrative.
If you were talking a general database, then again you need to scope what you're interested in. For events such as embarkation etc, I'd just have a general Event table, where each line in the table (i.e. each event for a person) has a type to define whether it's an embarkation, etc. Some events are of such importance that you might give them their own column in the Individuals table. The problem there is that while it makes it easier to pull off a list of those who joined in 1915 (say), you can easily get yourself wrapped up in trying to define which the joining-event actually is and end up with several, which destroys the simplicity.
Unknown dates - no debate there - leave them blank.
Approximate dates - several issues here:
- How do you want to search on them - is "Approx Dec 1915" to appear in a search for Events in 1915 and not in a search for Events in 1916? (My advice to that would be - yes)
- How do you want to display the event details?
- How do you want to sort the events for display? Chronological order, I guess so it's a possible idea to have one date for sorting that isn't actually a real date of the person - just an arbitrary version of it to sort correctly.
Without thinking it through much further, I'd suggest the date items would look like:
- Date-1-YYYY (the year part of exact date if an exact date is known or the start of a range);
- Date-1-MM (the mm part of exact date if an exact date is known or the start of a range);
- Date-1-DD (the day part of exact date if an exact date is known or the start of a range);
- Date-2-YYYY (the year part of the end of a range);
- Date-2-MM (the mm part of the end of a range);
- Date-2-DD (the day part of the end of a range);
- Sort-Date (value to show where the event comes when sorted - need only be a single YYYYMMDD format)
- Qualifier-for-date-1 (= Approx or Estimate else assumed to be exact);
- Qualifier-for-date-2 (= Approx or Estimate else assumed to be exact);
- Range (code to say that 2 dates are From-A-To-B or Between-A-and-B )
So "FROM ABOUT August 1914" goes in as:
- Date-1-YYYY = 1914;
- Date-1-MM = 08;
- Date-1-DD = empty;
- Date-2-YYYY empty;
- Date-2-MM empty;
- Date-2-DD empty;
- Sort-Date = 19140801
- Qualifier-for-date-1 = Approx;
- Qualifier-for-date-2 = empty;
- Range = From-To
Something like that........