Вы задаете много вопросов, которые затрудняют выбор любого из предложенных вами решений, без большого количества разъяснений о конкретной проблеме, которую вы пытаетесь решить. Рассмотрите не только мои уточняющие вопросы, но и критерии, которые вы будете использовать для оценки моих вопросов, в качестве показателя количества деталей, необходимых для решения вашей проблемы:
- система, которую легко изучать и обслуживать.
Какую «Систему» будет легко изучать и обслуживать? Исходный код вашего приложения или данные приложения через интерфейс конечного пользователя?
- В моей базе данных установлена целостность данных.
Что вы подразумеваете под "принудительным применением в моей базе данных"? Означает ли это, что вы никоим образом не можете контролировать целостность данных, т. Е. Проект требует только правил целостности данных на основе БД?
- схема, которая соответствует реальной логической организации моих данных.
Можете ли вы предоставить нам реальный мир, логическую организацию, на которую вы ссылаетесь? Невозможно понять это из ваших трех примеров данных, которые вы пытаетесь сохранить - то есть, предположим, что все три ваши структуры абсолютно неверны. Откуда нам это знать, если мы не знаем спецификацию реального мира?
- классы / объекты в моем программировании, которые хорошо отображаются в таблицы базы данных (как в Linq to SQL)
Это требование звучит так, как будто ваша рука вынуждена создавать его с помощью linq to SQL, так ли это?
- быстрые операции чтения и записи
Что такое "скоростной"? 0,03 секунды? 3 секунды? 30 минут? Это неясно, поскольку вы не указываете размер данных и тип операций, на которые ссылаетесь.
- эффективное использование пробела (несколько пустых полей)
Эффективное использование пространства не имеет ничего общего с количеством пустых полей. Если вы имеете в виду нормализованную структуру базы данных, это снова будет зависеть от реальных спецификаций и других элементов дизайна приложения, которые не были представлены в этом вопросе.