С какими системами управления базами данных (СУБД) вы работали?

«С какими системами управления базами данных (СУБД) вы работали?» — вопрос из категории Базы данных, который задают на 25% собеседований C# Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Мой основной опыт включает работу со следующими реляционными СУБД:

  • Microsoft SQL Server: Наиболее глубокий опыт. Работал над оптимизацией сложных запросов (анализ планов выполнения, создание индексов), разрабатывал хранимые процедуры, функции, триггеры и представления. Использовал возможности AlwaysOn для обеспечения высокой доступности.
  • PostgreSQL: Применял в проектах, где были важны открытость, расширяемость и продвинутые типы данных. Имею опыт работы с JSONB для хранения полуструктурированных данных, а также с полнотекстовым поиском.
  • MySQL / MariaDB: Использовал в веб-проектах, часто в связке с PHP или как часть стека LEMP. Знаком с особенностями движков хранения InnoDB и MyISAM.
  • SQLite: Идеальный выбор для встраиваемых приложений, локальных кэшей или прототипирования. Использовал в мобильных и десктопных приложениях на .NET.

Пример работы с данными на C# с использованием ADO.NET (для MS SQL Server):

public async Task<List<User>> GetUsersAsync()
{
    var users = new List<User>();
    // using гарантирует закрытие соединения
    using (var connection = new SqlConnection(_connectionString))
    {
        await connection.OpenAsync();
        // using гарантирует освобождение команды
        using (var command = new SqlCommand("SELECT Id, Name, Email FROM Users WHERE IsActive = @isActive", connection))
        {
            command.Parameters.AddWithValue("@isActive", true);
            // using гарантирует закрытие DataReader
            using (var reader = await command.ExecuteReaderAsync())
            {
                while (await reader.ReadAsync())
                {
                    users.Add(new User 
                    { 
                        Id = reader.GetInt32(0),
                        Name = reader.GetString(1),
                        Email = reader.GetString(2)
                    });
                }
            }
        }
    }
    return users;
}

Для повышения продуктивности и абстракции от чисто SQL активно использовал ORM, в первую очередь Entity Framework Core (Code-First и Database-First подходы) и Dapper как микро-ORM для сценариев, критичных к производительности.