Ссылка на несовпадение внешнего ключа

Мне нужна ваша помощь, пожалуйста, я создаю приложение 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ПК.

Другие вопросы по тегам