2

안녕하세요 친애하는 스택 오버플로 지역 사회에서 삭제됩니다.
아마도 도움을 줄 수 있습니다.SQL : 어린이 (그러나 이론적 부모) 때 부모를 삭제는 <p></p>는 이미 많은 시간을 검색하지만 난 솔루션 내 매우 독특한 시나리오를 찾을 수 없습니다하는 OneToOne 관계

two tables이 있다고 가정 해 봅시다.

|domain_realm      | | password_policy      | 
|-------------------------------- | | ---------------------------------------| 
|id domain password_policy_id | | id min_chars min_numbers min_length | 
|1  1  11     | | 11 3   2      | 
|2  1  12     | | 12 4   1      | 

하나가 다른 하나 password_policydomain_realm,라고합니다.

이것은 OneToOne 관계이므로 하나의 domain_realm은 하나만 password_policy입니다.

지금이 시나리오에서 매우 독특한 케이스를 제공 :
domain_realm 그것의 부모의 외래 키를 들고 password_policy_id (더 많거나 적은 FK) 대신 password_policy을 보유하고 있습니다.

Why would someone do this?
Let's assume password_policy is part of a package for many other applications not working with domain realms. Therefore keeping the table clean of any specific rows no other application needs (e.g. fk_domain_relam) is mandatory.


는 지금은 domain_realm을 삭제할 때 자동으로 ( ON DELETE CASCADE)이 상관 관계를 password_policy을 삭제하는 것은 불가능 것으로 보인다.

SQL을 수행하는 방법이 있습니까? 아니면 을 알고 있습니까?을 알고 password_policy이 제 코드에서 삭제 되나요?

domain_realm을 데이터베이스에서 직접 삭제해야하는 경우 (디버그 또는 지원 이유) 고아를 작성 했으므로이 사실을 알고 있어야합니다. 그렇지 않으면 고아가 그 db에 영원히 남을 것입니다.

대단히 감사 드리며 이것을 읽었습니다.

+0

당신이 당신의 구조에 대한 질문을 .. –

+0

몰라 당신이 무슨 뜻인지 및/또는 필요 . 내 구조에 대한 그래픽과 아주 정확한 설명이 있습니다. :-( – sdk

+1

먼저 그림이 아닌 형식의 텍스트를 제공하십시오. 그리고 두 번째로 링크가 끊어집니다.) –

답변

0

domain_realm에서 삭제 한 후에 트리거를 생성 할 수 있습니다. 나는 PostgreSQL을의 구문에 대한 100 % 모르겠지만, 이런 식으로 뭔가 보일 것입니다 : 구조를 제공하지 않고

CREATE OR REPLACE FUNCTION update_policy() RETURNS TRIGGER AS $$ 
    BEGIN 
      DELETE FROM password_policy WHERE password_policy_id = OLD.password_policy_id; 
      IF NOT FOUND THEN RETURN NULL; END IF; 
    END; 
$$ LANGUAGE plpgsql; 

CREATE TRIGGER clean_policy 
AFTER DELETE ON domain_realm 
FOR EACH ROW EXECUTE PROCEDURE update_policy(); 
+0

'NULL NOT RETURN NULL을 찾았습니까? END IF;'("ERROR : 제어가 RETURN없이 트리거 절차의 끝에 도달했습니다.")로 넘어가지만 정확히 내가 원하는대로 작동합니다! 위의 내용을 단순히'RETURN NULL'로 변경했습니다. 트리거에 대해 조금 더 연구 할 것이고 왜 해결 방법이 잘못 될 수 있지만 지금은 대단히 감사합니다! – sdk