Один вариант, который может работать для вас:
- Поместите ParentID и ChildID в отдельную таблицу, удалите ParentID из базовой таблицы
- Каскадное удаление, основанное исключительно на ID -> ParentID
Проблема в том, что при удалении дочернего элемента вы не удаляете ссылку из его родителя, а при удалении родительского элемента не удаляются ссылки из его дети любым внукам.
Однако вы можете обойти это в своем приложении, всегда используя INNER JOIN против ParentID и ChildID, поэтому любой оставшийся пух в таблице Parent / Child будет игнорироваться.
Затем вы можете запускать хранимую процедуру на любой временной основе, которую хотите очистить от любых отношений Родитель / Дочерний, где родитель или потомок не существует. Полоскать и повторять каждый раз, когда вы его запускаете, так как простое УДАЛЕНИЕ ИЗ родительского элемента WHERE NE (родительский) или NE (дочерний) не будет рекурсивным.