1

나는 관계를 가지고있다 - PK 자식 테이블의 외래 키 제약 조건에 부모 테이블에 아직 기본 키로 생성되지 않은 값을 삽입 할 수 있습니까?

  • 메시지 테이블로 contactNumber를 사용하여 - PK
  • Contact_Message로 messageID 설명을 사용하여 - 많은 매핑 많은 외래 키를 포함 - 테이블

    • 연락받은 편지함을
    • 를 채우는 데 사용


    한 기업에게 많은 메시지를 보낸 수, 즉/ 를 수신 한 메시지는 하나의 접촉 012에서 많은 연락처로 보냈지 만 수신 할 수있다
    BUT 데이터베이스의 연락처 테이블에없는 알 수없는 번호와 메시지를주고받을 가능성이 있습니다.
    관계가 많으므로 ContactMessage 테이블에 알 수없는 숫자를 추가해야 쿼리 할 수 ​​있습니다. 그 contactNumber이 연락 발견되지 않기 때문에


    내가 무엇을 찾고 있어요 것은 단지 Contact_Message 테이블 하지만 SQLite는 DB 엔진에 (같이받은 편지함에 표시)를 contactNumber을 추가하는 오류 가 외래 키 제약 조건이 실패 발생 표.

    .... 또한

    : 내 우려를 설명하는, 내가 원하는 :

    • contactNumber는 여부를 테이블에 관계없이 contact_m2m_message에 INSERT에 contactNumber입니다 존재하지 않는다 테이블 또는 아니요
    • 연락처가 삭제 된 경우 의 관련 행/초 contact_m2m_message은 삭제하면 안됩니다. 관련 contactNumber
    • 메시지가 삭제 된 경우, 해당 행/S가 contact_m2m_message

    에서 삭제해야를 지속해야 messageID 설명.

    이 문제에 대한 해결책은 있습니까? . 당신이 해당 연락없이 Contact_Message 관계를 가질 수있는 요구 사항이

     
    CREATE TABLE contact (
        contactNumber Numeric PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, 
        contactName TEXT NOT NULL 
    ); 
    
    CREATE TABLE message (
        msgID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, 
        messageContent TEXT NOT NULL 
    ); 
    
    CREATE TABLE contact_m2m_message (
        contactNumber NUMERIC NOT NULL REFERENCES contact (contactNumber) 
        ON DELETE NO ACTION ON UPDATE CASCADE, 
    
        messageID INTEGER NOT NULL REFERENCES message (msgID) 
        ON DELETE CASCADE ON UPDATE CASCADE 
    ); 
    
    
  • 답변

    0

    : 여기

    는 코드입니다.

    외래 키를 사용하면 모든 Contact_Message 관계에 해당 Contact가 있어야한다는 제약 조건이 추가됩니다.

    이러한 제약 조건 중 하나는 잘못되었으며 설명에 따르면 두 번째 것입니다. 외래 키 제약 조건을 제거하기 만하면됩니다.

    ON UPDATE CASCASE 작업을 계속 수행하려면 trigger으로 구현해야합니다.