Внешние ключи играют решающую роль в управлении базой данных, обеспечивая целостность данных и устанавливая связи между таблицами. Во Flutter Sqflite — популярный пакет для операций с базами данных SQLite. В этой статье мы рассмотрим различные методы и приемы работы с внешними ключами в Sqflite, сопровождаемые примерами кода.
- Создание таблиц с внешними ключами.
Чтобы установить связь внешнего ключа между двумя таблицами, вам необходимо определить ограничение внешнего ключа во время создания таблицы. Вот пример:
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)
)
''');
- Извлечение данных с помощью отношений внешнего ключа.
Чтобы получить данные из таблиц с отношениями внешнего ключа, вы можете использовать запросы 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();
}
- Вставка данных с помощью связей с внешними ключами.
При вставке данных в таблицы с внешними ключами необходимо обеспечить целостность связей. Вот пример:
Future<void> insertEmployee(Employee employee) async {
await db.insert('Employee', employee.toMap());
}
- Обновление данных с помощью отношений внешнего ключа.
Чтобы обновить данные в таблицах с внешними ключами, вы можете использовать оператор UPDATE. Вот пример:
Future<void> updateEmployeeDepartment(int employeeId, int newDepartmentId) async {
await db.update(
'Employee',
{'department_id': newDepartmentId},
where: 'id = ?',
whereArgs: [employeeId],
);
}
- Удаление данных с использованием внешних ключей.
При удалении записей из таблиц с внешними ключами у вас есть различные варианты. Вот пример:
Future<void> deleteEmployee(int employeeId) async {
await db.delete(
'Employee',
where: 'id = ?',
whereArgs: [employeeId],
);
}
Внешние ключи необходимы для поддержания связей и целостности данных в базах данных. В этой статье мы рассмотрели различные методы работы с внешними ключами в пакете Flutter Sqflite. Мы рассмотрели создание таблиц с внешними ключами, получение данных с помощью запросов JOIN, вставку, обновление и удаление данных с помощью отношений внешнего ключа. Используя эти методы, вы можете эффективно управлять связями в базе данных Sqflite в приложении Flutter.