You raise a lot of questions that make it hard to select any of your proposed solutions without a lot more clarification on the exact problem you are trying to solve. Consider not just my clarification questions, but the criteria that you will use to evaluate my questions, as an indication of the amount of detail required to solve your problem:
- a system that's easy to learn and maintain.
What "System" will it be easy to learn and maintain? The source code of your app, or the app's data via it's end-user interface?
- data integrity enforced within my database.
What do you mean by "enforced within my database"? Does this mean you cannot by any means control data integrity any other way, i.e. the project requires only DB-based data integrity rules?
- a schema that matches the real-world, logical organization of my data.
Can you provide us the real world, logical organization to which you are referring? It's impossible to infer it from your three examples of the data you are trying to store -- i.e. suppose all three of your structures are completely wrong. How would we know that unless we know the real-world spec?
- classes/objects within my programming that map well to database tables (à la Linq to SQL)
This requirement sounds like your hand is being forced to create this with linq to SQL, is that the case?
- speedy read and write operations
What is "speedy"? .03 seconds? 3 seconds? 30 minutes? It's unclear because you're not specifying the data size and type of operations to which you are referring.
- effective use of space (few null fields)
Effective use of space has nothing to do with the number of null fields. If you mean a normalized database structure, that will depend again on the real-world spec's and other design elements of the application that have not been provided in the question.