계단식 삭제에 대한 설명서를 읽었지만, 분명히 밝혀지지 않은 한 가지 점은 자식 행을 둘 이상으로 공유 할 수 있도록 데이터베이스를 설정할 수 있는지 여부입니다. 부모 행을 참조하는 마지막이 삭제되면 하나의 상위 행과 하위 행만 삭제됩니까? 즉 내장 된 설정을 DELETE CASCADE, 그것은 트리거와 함께 할 수와 함께 할 수없는 경우SQLite는 마지막 참조가 삭제 될 때 공유 행을 삭제합니다.
는
(기본적으로 나는 외국 성병 :: shared_ptr을처럼 행동 키를. 원하는)? 그게 어떻게 생겼어?
내가 가지고있는 마지막 옵션은 가능하지만이 공유 참조 상황을 만들기 위해 작성한 라이브러리에이 있습니다. 그런 일을 시도하려는 시도가있을 때 예외를 던질 수 있습니다. .
특히, 나는 추상 구문 트리와 같은 것을 저장하는 자체 참조 테이블을 가지고있다. 각 노드에는 작업과 두 개의 자식 노드가 있습니다. 데이터베이스를 사용하는 C++ 프로그램에서이 테이블의 행을 나타내는 객체는 테이블에 행이 동시에 생성되도록하는 값을 반환하는 연산자를 오버로드합니다. 예를 들어 "a < < b"는 임시 값 "c"를 반환하고 데이터베이스는 (c_id, '< <', a_id, b_id)와 같은 행을 갖습니다. 그러나 "a < < x"에 대한 호출로이 작업을 수행 할 수 있습니다.이 경우 데이터베이스에는 "a"를 참조하는 두 개의 행이 포함됩니다.
C++ 클래스는 생성자에 테이블 행을 삽입하고 소멸자에서 테이블 행을 삭제하도록 작성됩니다. 본질적으로, 나는 C++ 코드의 임시 객체를 생성하고 파기하여 데이터베이스의 상태로 미러링하고 싶습니다. 하지만 여전히 다른 부모에 의해 참조 된 경우 자식 행을 삭제하지 않도록 싶습니다.