2011-09-27 2 views
0

sqlite에서 외래 키가없는 테이블을 만드는 방법을 알아 내려고하고 있습니다. 나는 지금 일하고있는 일부 응용 프로그램에서 비 호환성으로 인한 외래 키의 사용을 피하고 싶습니다.SQLite, 외래 키가없는 연결을 처리하는 방법은 무엇입니까?

아무도 간단한 테이블을 2 개의 테이블로 보여 주시겠습니까? 고맙습니다.

간단한 예 : 특정 아티스트의 모든 트랙을 어떻게 선택합니까?

CREATE TABLE artist(
    artistid INTEGER PRIMARY KEY, 
    artistname TEXT 
); 

CREATE TABLE track(
    trackid  INTEGER, 
    trackname TEXT, 
    trackartist INTEGER 
); 

답변

1

외래 키를 지정하지 않으면 외래 키가 없습니다.

SELECT t.trackname, t.trackid 
    FROM track t 
INNER JOIN artist a 
    ON a.artistid = t.trackartist 
WHERE a.artistname = 'Alex' 
+0

예. 그렇지만 테이블 엔티티를 연결하는 방법은 무엇입니까? (SELECT 1 FROM artist where where artistid = trackartist) – devjs11

+0

@Alex : 외래 키는 제약 조건 일뿐입니다. 제약이 없다고해서 쿼리를 변경해야한다는 의미는 아닙니다. – Benoit

+0

내 게시물을 업데이트했습니다. 외래 키를 사용하지 않고 특정 아티스트의 모든 트랙을 선택하려면 어떤 쿼리를해야합니까? – devjs11

1

외래 키를 선언하지 않고도 테이블간에 관계를 가질 수 있습니다. 당신은 단순히 (당신이 a.*, t.* 대신 원하는 실제 열을 대체)

SELECT a.*, t.* FROM artist a INNER JOIN track t ON a.artistid = t.trackartist; 

을한다.

trackartist가 아티스트 (아티스트)의 외래 키임을 선언하지 않고도이 작업을 수행 할 수 있습니다. 이 선언을하면 SQLite는 트랙 아티스트에 유효한 아티스트가 아니며 트랙 아티스트에 사용 된 아티스트를 절대 변경하거나 제거하지 않을 것을 보장합니다.

외래 키는 테이블 간의 연결 무결성을 유지하기위한 메커니즘이지만 데이터베이스에 선언 된 기본 키나 외래 키와 관계없이 SELECT 문에서 원하는 모든 연결을 "만들 수 있습니다.

관련 문제