Сейчас буду ругаться :)
1) Выбор СУБД, т.е. что в каких случаях выбирать
Основываясь на своем опыте (22 - проекта) рекомендую так:
СУБД это всего лишь инструмент
- Если в организации есть хорошие специалисты которые могут эффективно работать на MS SQL знают все его возможности и понимают почему он так дорого стоит - тогда MS SQL
- Если в организации есть хорошие специалисты Ораклы - тогда лучше ставить Ораклу
- Если обрабатываются очень очень секретные данные - тогда тоже лучше что то отличное от MS SQL - например Ораклу (так как операционная система отличная от Виндовс) - но в большинстве компаний данные не представляют интерес для спецслужб :)
2) Выбор подсистем субд
- Было бы здорово понять что такое "Подсистема СУБД"
3) Освещение моментов выбора индексов
- Все зависит от запросов которые идут в базу, а так же от данных. На начальном этапе индексирования в MS SQL пригодится Помощьник по настройки ядра СУБД. Дальше уже надо исходить из анализа планов запросов (не обязательно всех, а хотя бы самых длительных). При этом надо учитывать что на тестовых данных будут оптимальны одни индексы, а через год эксплуатации имеющиеся индексы уже могут стать не самым лучшим способом поиска по таблицам .... это админить надо базу ...
4) Может быть какие-нибудь паттерны проектирования
- В моей компании только и делают что переучивают пришедших специалистов у которых в голове свои патерны! Честное слово - в институте такой Херни на вдалбливают в голову студентов что диву даешься (например: некоторые разработчики в каждой таблице вставляют поле идентети - хотя по нему поиск не производится,и еще на это же поле вешают кластерный индекс - "Мудацкое Российское Высшее Образование"(с))
- Патерны Хорошо! Замечательно! Но универсальных способов нет!
Ознакомится с ними стоит что бы не делать ошибок - но даже если сделали такую ошибку - то никто не мешает потом исправить :) разбить таблицу на несколько или объеденить пару таблиц в одну. Главное что бы апликушники (программисты клиентской части) пользовались принципами ООП (что бы сильно не переделывать код программы при изменении структуры базы)