I'm pretty new to data modeling, so please excuse me if I've missed something obvious. I'm trying to decide on a schema (or possibly a DBMS) to work with some data where there are quite a few possible attributes (60-100 maybe), but only a handful will apply to each record. Here are my options as I see them.
Option 1: Very wide table
Just include each of the attributes as columns and most will be NULL for any given record.
Pros: keeps schema simple, keeps queries simple
Cons: inelegant, unwieldy, adding/removing properties requires a schema change
Option 2: Entity-attribute-value model
Separate table(s) for listing attributes and their values. This is how I've seen this problem handled before. For example, WordPress uses something like this for their
Pros: easy to understand conceptually, flexible
Cons: query construction becomes a pain, performance suffers, you wind up with a lot of duplicated data (i.e. the same property name is listed over and over).
Option 3: NoSQL Document or Graph DBMS
Go with a DBMS that's built to handle schema-less data. I've looked at MongoDB, RethinkDB, and OrientDB. OrientDB looks really cool, but I don't know Java, and it seems like it's primarily a Java thing (the PHP driver, for example, looks problematic).
Pros: built to handle flexible schemata, fast
Cons: relationships seem difficult, I have no experience with them, seems like a lot of duplicate data (e.g. what happens if I want to change the name of a property?), querying seems way more complicated
As a side note, this application will not get very much traffic, and will have very few concurrent connections. So, scalability is a fairly minor concern. Thanks for any suggestions.