문제

할 수 있는 사람을 명확한 설명을 제공/예를 들어 이러한 기능을 하며,적절한 경우 그들을 사용합니까?

도움이 되었습니까?

해결책

에서 바로 설명...

우리가 알고 있는 외국의 열쇠를 허용하지 않는 주문 생성과 관련이 없는 어떤 제품입니다.하지만 어떤 경우 제품이 제거된 후에는 순서가 만들어 참조하는 it?SQL 을 처리할 수 있습니다.직관적으로,우리는 몇 가지 옵션:

허용하지 않을 삭제하는 참조되는 제품

삭제 뿐만 아니라 주문

다른 뭔가?

CREATE TABLE order_items (
 product_no integer REFERENCES products ON DELETE RESTRICT,
 order_id integer REFERENCES orders ON DELETE CASCADE,
 quantity integer,
 PRIMARY KEY (product_no, order_id)
);

을 제한하고 연속 삭제하는 가장 일반적인 두 가지 옵션이 있습니다.을 제한을 방지 참조의 삭제 행이 있습니다.작업이 없는 경우 어떤 행을 참조하 여전히 존재하는 경우 제한조건 선택,오류가 발생합니다;이것은 기본 행동을 지정하지 않으면 아무것도.(필수적인 차이를 이러한 두 가지 선택이는 아무 작업도 수 있습 확인을 거치될 때까지 나중에 트랜잭션에서는 반면,를 제한하지 않습니다.) 캐스케이드을 지정하는 경우 참조하는 행 삭제 행(s)참조해야한 자동으로 삭제됩니다.는 다른 몇 가지 옵션이 있습니다:설정 NULL 로 설정 기본입니다.이러한 원인은 열을 참조하여 설정하 null 또는 기본값으로,각각할 때,참조하는 행 삭제됩니다.이러한하지 않습에서 당신을 변명을 관찰하는 모든 제약 조건이 있습니다.는 경우,예를 들어 작업 지정하는 설정의 기본이지만 기본 값을 만족하지 않은 외국의 키 조작이 실패합니다.

와 유사에서 삭제도에 업데이트를 호출할 때는 참조되는 열가 변경(업데이트됩니다).가능한 동작은 동일합니다.

편집: 할 수 있습을 살펴 이와 관련된 질문: /때 사용하는 이유식에서 SQL Server?.개념 질문/답변은 동일합니다.

다른 팁

PostgreSQL 데이터베이스가 있고 데이터베이스에서 삭제 한 사용자가있을 때 Delete에서 사용하고 다른 테이블에서 정보를 삭제해야합니다. 이 방법은 1 삭제와 FK 만 수행하면 다른 테이블에서 정보를 삭제합니다.

업데이트에서도 똑같이 할 수 있습니다. 테이블을 업데이트하고 필드에 업데이트시 FK가있는 경우 FK에서 변경 사항이 이루어지면 FK 테이블에서 알 수 있습니다.

무엇이 다옥 말은 사실입니다...할 수 있히 편리합니다.다른 한편으로,데런 일을 자동적으로 데이터베이스에서 진짜 문제가 될 수 있습,특히 때를 제거하는 데이터입니다.그것은 가능한 미래에는 사람이 믿는 사실 FKs 일반적으로 삭제되는 것을 방지하는 부모의 경우 아이들이 있지 실현의 사용에서 삭제 폭포하지만하지 않는 삭제되는 것을 방지,그것은 엄청난 양의 데이터에서 수십의 기타 테이블 멀리 가 덕분이 폭포의 연계 삭제합니다.

@Arthur's comment.

더 자주"숨"일 데이터베이스에서의 가능성이 적은이 되는 사람이 이제까지 어떻게 잘 처리하는 것입니다.트리거(그리고 이것은 본질적으로 트리거)을 일으킬 수 있 나의 간단한 동작의 행 삭제를 가지고,넓은 범위의 결과를 통해 데이터베이스입니다.나는 문제는 삭제 문 17 테이블은 영향을 받으로 폭포의 트리거 및 제약 조건과 이것이 바로 명백한 발행에의 명령입니다.새로운 경우 나의 삭제를 부모와 그것의 모든 아이들이 절차에서 그것은 매우 쉽고 명확한 누군가를 위해 정확히 무슨 일이 일어날 때가 다음 명령을 실행하십시오.

그것은 절대로 할 수 없는 방법과 잘 나는 디자인 데이터베이스.그것은 함께 할 수있는 모든 것을 갖추고 운영제를 도입에 의해 트리거합니다.

캐스케이드 삭제 또는 캐스케이드 업데이트의 모든 작업을 수행하는 방법을 작성하는 대신 대신 경고 메시지를 작성할 수 있습니다. 휠을 재창조하는 것보다 훨씬 쉽고 클라이언트 (및 코드를 선택하는 신규 개발자)에게 분명합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top