Изучение внешних ключей в базе данных Sqflite Flutter: подробное руководство

Внешние ключи играют решающую роль в управлении базой данных, обеспечивая целостность данных и устанавливая связи между таблицами. Во Flutter Sqflite — популярный пакет для операций с базами данных SQLite. В этой статье мы рассмотрим различные методы и приемы работы с внешними ключами в Sqflite, сопровождаемые примерами кода.

  1. Создание таблиц с внешними ключами.
    Чтобы установить связь внешнего ключа между двумя таблицами, вам необходимо определить ограничение внешнего ключа во время создания таблицы. Вот пример:
await db.execute('''
  CREATE TABLE Department (
    id INTEGER PRIMARY KEY,
    name TEXT
  )
''');
await db.execute('''
  CREATE TABLE Employee (
    id INTEGER PRIMARY KEY,
    name TEXT,
    department_id INTEGER,
    FOREIGN KEY (department_id) REFERENCES Department(id)
  )
''');
  1. Извлечение данных с помощью отношений внешнего ключа.
    Чтобы получить данные из таблиц с отношениями внешнего ключа, вы можете использовать запросы JOIN. Вот пример:
Future<List<Employee>> getEmployeesWithDepartments() async {
  final List<Map<String, dynamic>> result = await db.rawQuery('''
    SELECT Employee.id, Employee.name, Department.name AS department_name
    FROM Employee
    INNER JOIN Department ON Employee.department_id = Department.id
  ''');
  return result.map((row) => Employee.fromMap(row)).toList();
}
  1. Вставка данных с помощью связей с внешними ключами.
    При вставке данных в таблицы с внешними ключами необходимо обеспечить целостность связей. Вот пример:
Future<void> insertEmployee(Employee employee) async {
  await db.insert('Employee', employee.toMap());
}
  1. Обновление данных с помощью отношений внешнего ключа.
    Чтобы обновить данные в таблицах с внешними ключами, вы можете использовать оператор UPDATE. Вот пример:
Future<void> updateEmployeeDepartment(int employeeId, int newDepartmentId) async {
  await db.update(
    'Employee',
    {'department_id': newDepartmentId},
    where: 'id = ?',
    whereArgs: [employeeId],
  );
}
  1. Удаление данных с использованием внешних ключей.
    При удалении записей из таблиц с внешними ключами у вас есть различные варианты. Вот пример:
Future<void> deleteEmployee(int employeeId) async {
  await db.delete(
    'Employee',
    where: 'id = ?',
    whereArgs: [employeeId],
  );
}

Внешние ключи необходимы для поддержания связей и целостности данных в базах данных. В этой статье мы рассмотрели различные методы работы с внешними ключами в пакете Flutter Sqflite. Мы рассмотрели создание таблиц с внешними ключами, получение данных с помощью запросов JOIN, вставку, обновление и удаление данных с помощью отношений внешнего ключа. Используя эти методы, вы можете эффективно управлять связями в базе данных Sqflite в приложении Flutter.