Ссылка на несовпадение внешнего ключа
Мне нужна ваша помощь, пожалуйста, я создаю приложение to-do с флаттером, используя moor в качестве базы данных, я создал три таблицы в своей базе данных, но только две из них обеспокоены моей проблемой, это задачи и проекты. Затем, когда я пытаюсь чтобы вставить новую задачу, я получил эту ошибку
Произошло исключение. SqliteException (SqliteException: несоответствие внешнего ключа - "задачи" ссылаются на "проекты", логическая ошибка SQL)
Вот моя таблица проектов
class Projects extends Table {
IntColumn get id => integer().autoIncrement()();
IntColumn get tasksNumber => integer()();
TextColumn get projectName => text().withLength(min: 2, max: 32)();
TextColumn get description => text().withLength(min: 2, max: 35)();
DateTimeColumn get dateAndTime =>dateTime().withDefault(Constant(DateTime.now()))();
BoolColumn get isCompleted => boolean().withDefault(Constant(false))();
@override
Set<Column> get primaryKey => {id, projectName};
}
И задача первая
class Tasks extends Table {
IntColumn get id => integer().autoIncrement()();
TextColumn get project =>text().customConstraint('REFERENCES projects(projectName)')();
TextColumn get taskName => text().withLength(min: 2, max: 32)();
DateTimeColumn get dateAndTime =>dateTime().withDefault(Constant(DateTime.now()))();
BoolColumn get isDone => boolean().withDefault(Constant(false))();
@override
Set<Column> get primaryKey => {id, taskName, project};
}
Спасибо за вашу помощь
1 ответ
Я не уверен, но кажется, что причина в том, что дочерняя таблица fk ссылается на столбец, отличный от pk, в родительской таблице.
В вашем случае, если вы измените
'REFERENCES projects(projectName)'
к
'REFERENCES projects(id)'
ошибка уйдет. Или сделать
projectName
ПК.