У меня установлены самореферентные отношения. У человека может быть один родитель-одиночка (или Нет), а у человека может быть много детей (или Нет).
Таким образом, NULL допускается в качестве FK:
class Person(db.Model):
id = db.Column(db.Integer, primary_key=True)
parent_id = db.Column(db.Integer, db.ForeignKey('person.id', ondelete='RESTRICT'))
parent = db.relationship('Person', remote_side=[id], back_populates='children')
children = db.relationship('Person', back_populates='parent')
Однако я хочу запретить удаление человека, если он является родителем. Поэтому я включил пункт ondelete='RESTRICT'
, но он не действует. Столбец parent_id по-прежнему имеет значение NULL, когда родитель удаляется.
(обратите внимание, что мое соединение с SQLite переключило ограничения внешнего ключа pragma на ON)
Почему база данных не выдает ошибку при удалении родителя и, следовательно, дочерний столбец с ним в качестве внешнего ключа ограничивает это?