Был ли у вас опыт работы со связями между таблицами в базах данных?

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

Ответ

Да, обширный опыт. Работал с основными типами связей: один-к-одному (One-to-One), один-ко-многим (One-to-Many) и многие-ко-многим (Many-to-Many). Использовал как нативные SQL-запросы с JOIN, так и ORM, такие как Entity Framework Core и Django ORM.

Пример связи один-ко-многим в EF Core:

public class Author
{
    public int Id { get; set; }
    public string Name { get; set; }
    // Навигационное свойство для коллекции книг
    public ICollection<Book> Books { get; set; }
}

public class Book
{
    public int Id { get; set; }
    public string Title { get; set; }
    // Внешний ключ
    public int AuthorId { get; set; }
    // Навигационное свойство для автора
    public Author Author { get; set; }
}

Почему это важно: Правильное проектирование связей обеспечивает целостность данных и позволяет эффективно строить запросы. Для связи многие-ко-многим обычно создается промежуточная таблица (junction table).

Практические аспекты:

  • Каскадные операции: Настройка ON DELETE CASCADE для автоматического удаления зависимых записей.
  • Загрузка данных: Выбор между ленивой (Lazy Loading) и жадной (Eager Loading или Include()) загрузкой связанных данных для оптимизации производительности.
  • Индексы: Создание индексов на внешних ключах для ускорения операций JOIN.
  • Транзакции: Использование транзакций для согласованного обновления связанных данных в нескольких таблицах.