복붙노트

[SQL] 무엇 외래 키 불일치 오류를 일으키는?

SQL

무엇 외래 키 불일치 오류를 일으키는?

다음과 같이 나는 SQLite는 데이터베이스를 구성했다 :

CREATE TABLE IF NOT EXISTS Patient 
( PatientId INTEGER PRIMARY KEY AUTOINCREMENT );

CREATE TABLE IF NOT EXISTS Event 
( 
PatientId INTEGER REFERENCES Patient( PatientId ),
DateTime TEXT,
EventTypeCode TEXT,
PRIMARY KEY( PatientId, DateTime, EventTypeCode )
);

CREATE TABLE IF NOT EXISTS Reading 
( 
PatientId INTEGER REFERENCES Patient( PatientId ),
DateTime TEXT REFERENCES Event (DateTime),
EventTypeCode TEXT REFERENCES Event (EventTypeCode),
Value REAL,
PRIMARY KEY( PatientId, DateTime, EventTypeCode )
);

나는 ID # 1를 가진 환자를 삽입

나는 실행 :

INSERT INTO Event (PatientId, DateTime, EventTypeCode) VALUES (1, '2011-01-23 19:26:59', 'R')

어떤 작품

나는 실행 :

INSERT INTO Reading (PatientId, DateTime, EventTypeCode, Value) VALUES (1, '2011-01-23 19:26:59', 'R', 7.9)

그것은 나에게 외래 키 불일치를 제공합니다. 환자 ID가 모든 경우에 '1', 그리고 날짜와 타입 코드는 2 층과 3 쿼리에 일치합니다. 나는 일치하지 무엇인지 이해하지 않지만, 사실은 외부 키 정의에 약간의 새로운 그리고 난 내가 잘못을하고있는 중이 야 모르겠어요.

해결법

  1. ==============================

    1.나는 SQLite는 익숙하지 않아요하지만 조금 Google'ing이를 돌았 다. 문서를 말한다

    나는 SQLite는 익숙하지 않아요하지만 조금 Google'ing이를 돌았 다. 문서를 말한다

    나는 당신이 그 목록에 # 3으로 실행 될 수있다 생각한다.

    다른 데시벨이 외래 키 참조로 비 고유 인덱스를 사용을 지원하는 반면 또한, 내 의견에 나쁜 디자인의 선택입니다, (여기에 대한 답변을 참조). 그래서 그 중 하나 구조 조정 것

    난 당신이 이벤트와 읽기 모두 PatientId, 날짜 시간 및 EventTypeCode의 중복을 피할 수 있도록 # 2 건의 할 것입니다.

  2. from https://stackoverflow.com/questions/5208245/what-is-causing-foreign-key-mismatch-error by cc-by-sa and MIT license