2013-10-02 2 views
0

SQLite 데이터베이스에 테이블 집합이 있습니다. 이 테이블의 모든 데이터는 일부 ID에 의해 집합 그룹으로 분리 될 수 있습니다. 예를 들어 각 ID 열이 다른 ID을지도하고 각 ID2 다른 ID2 매핑됩니다다른 SQLite 데이터베이스에서 SQLite 데이터베이스 만들기 C#

Table A 
ID value1 value2 
1 asd fgh 
2 sdf ghj 

Table B 
ID ID2 value4 
1 10 vbn 
2 11 bnm 

Table C 
ID2 value5 value6 
10 asdfg qwer 
11 tyui hjkl 

.

나는이 데이터베이스를 가지고 가고, 동일한 구조를 가지고 각각의 작은 데이터베이스의 시리즈를 생성 할,하지만 1 ID에서 데이터가 포함됩니다 :

Database1.sqlite

Table A 
ID value1 value2 
1 asd fgh 

Table B 
ID ID2 value4 
1 10 vbn 

Table C 
ID2 value5 value6 
10 asdfg qwer 

에게 Database2.sqlite

Table A 
ID value1 value2 
2 sdf ghj 

Table B 
ID ID2 value4 
2 11 bnm 

Table C 
ID2 value5 value6 
11 tyui hjkl 
난 그냥 하나 하나 테이블을 작성하는 일련의를 통해 ID 당 모든 데이터를 수집 할 수

SELECT 문을 입력 한 다음 일련의 INSERT 문을 통해 추가합니다.하지만 더 나은 방법이 있어야한다고 생각합니다.

내 생각에 위의 형식으로 데이터를 분리하는 일련의보기를 만들 수 있습니다. 거기에서, 나는이 일련의 뷰를 sqlite 파일을 데이터베이스로 작성할 수 있습니다.

제 질문은입니다. 내 의견 세대 아이디어는 얼마나 현실적인가요? 각 테이블의 구조를 모방 한 일련의 뷰를 생성 할 수는 있지만, 어디에서 ID = 1이라고 말하고 그런 뷰를 sqlite 파일로 저장합니까? 이 모든 작업은 C#에서 수행해야합니다. 내가하려는 일을하는 더 좋은 방법이 있습니까?

일부 추가 정보 이 테이블은 동일한 ID를 가진 여러 행을 가질 수 있습니다. 또한 각 테이블에 대해 기본 키/외래 키가 필요합니다. 이상적으로, 우리는이 작은 테이블을 가져 와서 나중에 더 큰 테이블로 압축 할 수 있습니다.

답변

2

INSERTSELECT을 결합 할 수 있습니다. ATTACHed databases과 함께 테이블 당 하나의 명령문으로 복사 할 수 있습니다.

ATTACH 'C:\some\where\Database1.sqlite' AS db1; 
CREATE TABLE db1.A(ID, value1, value2); 
CREATE TABLE db1.B(ID, ID2, value4); 
CREATE TABLE db1.C(ID2, value5, value6); 
INSERT INTO db1.A SELECT * FROM main.A WHERE ID = 1; 
INSERT INTO db1.B SELECT * FROM main.B WHERE ID = 1; 
INSERT INTO db1.C SELECT * FROM main.C 
        WHERE ID2 IN (SELECT ID2 FROM B WHERE ID = 1); 

ATTACH 'C:\some\where\Database2.sqlite' AS db2; 
CREATE TABLE db2.A(ID, value1, value2); 
CREATE TABLE db2.B(ID, ID2, value4); 
CREATE TABLE db2.C(ID2, value5, value6); 
INSERT INTO db2.A SELECT * FROM main.A WHERE ID = 2; 
INSERT INTO db2.B SELECT * FROM main.B WHERE ID = 2; 
INSERT INTO db2.C SELECT * FROM main.C 
        WHERE ID2 IN (SELECT ID2 FROM B WHERE ID = 2); 
관련 문제