Назад к вопросам
Junior
70
questionbank

Приведи пример отношения 'один ко многим' (One to Many) в контексте баз данных.

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Отношение One-to-Many в контексте баз данных означает, что одна запись в одной таблице связана с множеством записей в другой таблице.

Типичный пример: Отдел (Department) и Сотрудники (Employees).

  • Один отдел может иметь множество сотрудников.
  • Каждый сотрудник принадлежит ровно одному отделу.

Таблица "Отделы" (Departments) может содержать:

ID Название
1 Продажи
2 Разработка

Таблица "Сотрудники" (Employees) может содержать:

ID Имя Фамилия department_id
101 Иван Петров 1
102 Мария Сидорова 1
103 Алексей Иванов 2

В этом примере department_id в таблице "Сотрудники" является внешним ключом (Foreign Key), ссылающимся на ID в таблице "Отделы". Это реализует отношение One-to-Many.

В ORM, например, Hibernate/JPA, это отношение может быть представлено следующим образом:

// Класс представляющий сущность Отдел (Department)
@Entity
public class Department {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    @OneToMany(mappedBy = "department", cascade = CascadeType.ALL) // Отношение One-to-Many с Employee
    private List<Employee> employees;

    // getters and setters
}
// Класс представляющий сущность Сотрудник (Employee)
@Entity
public class Employee {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String firstName;
    private String lastName;

    @ManyToOne // Отношение Many-to-One с Department (обратная сторона One-to-Many)
    @JoinColumn(name = "department_id") // Указывает на столбец внешнего ключа в таблице Employee
    private Department department;

    // getters and setters
}

Здесь @OneToMany в Department указывает на отношение "один отдел ко многим сотрудникам", а mappedBy = "department" говорит о том, что управление этим отношением на стороне Employee через поле department. @ManyToOne в Employee является обратной стороной отношения. @JoinColumn указывает на столбец внешнего ключа.