2013-10-02 5 views
0

У меня есть база данных SQLite, которая содержит набор таблиц. Все данные в этих таблицах можно выделить в группы множеств некоторым id. Например:Создать базу данных 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 

Где каждый ID колонка будет отображать другую ID и каждый ID2 будет отображаться на другой ID2.

Я хочу взять эту базу данных, и создать ряд небольших баз данных, каждый из которых имеет ту же структуру, но будет содержать данные только с 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#. Есть ли лучший способ сделать то, что я пытаюсь сделать?

Дополнительная информация Эти таблицы могут иметь несколько строк с одинаковыми идентификаторами. Для каждой таблицы также должны быть некоторые первичные ключи/внешние ключи. В идеале мы могли бы взять эти меньшие таблицы, а затем сжать их все в большую таблицу в будущем.

ответ

2

Можно комбинировать INSERT и SELECT. Вместе с 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); 
Смежные вопросы