У меня установлены отношения со ссылками на себя. У человека может быть один родитель (или никто), а у человека может быть много детей (или ни одного).
Так что 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 переключило ограничения внешнего ключа прагмы в положение ON)
Почему база данных не выдает ошибку, когда родитель удаляется, и, следовательно, дочерний столбец с его внешним ключом ограничивает это?