I think MongoDB might be good, because its docs make it easier to represent individual schemas. (solves the variable column problem).
To solve the linking problem, it makes sense to store only links. For example, in JobPosting, you probably want to keep OrganizationId and PlaceId , because these are pretty complex documents. It also makes calling a specific JobPostings organization trivial.
Note Sometimes an implementation may be more appropriate, but it depends a lot on the way your documents are updated. In particular, many objects can refer to the same address, so a change in address should be reflected everywhere. Sometimes the opposite is true. This is a key question that can only be answered by you. It depends on how the system is used.
In any case, linking means that one search can cross the link tree. Again, this is highly dependent on the use case:
Suppose you want to display JobPosting. Now you can display a list of properties, and for Organization, all you type is ACME, Inc. citing. This link will send you to the ACME, Inc. details page. In this case, your queries are very simple. The only thing you need to do is copy the organization name into JobPosting (de-normalization), so it’s easier to display.
If, on the other hand, you want to display everything in place, you will have to perform more queries and build the domain model object in code. This does not really matter, but requires extra care in the case of circular links, etc.
I guess the best approach is to use the corresponding most specific type as the name of the collection (so ContactPoint falls into the ContactPoint collection, PostalAddress in the PostalAddress collection, etc.).
The only remaining problem is multiple inheritance or mixins. I have not used ruby before, but I think the mongodb ruby driver supports mixins.
You still have to cope with indexing, etc., but again, it depends a lot on the use cases. You probably want to index most foreign keys, but additional indexes need manual maintenance.