У меня есть база данных SQLite, которая использует внешние ключи, некоторые из которых будут автоматически инкрементированными значениями. «Основные» данные, которые система представляет, например, автомобиль. Например, внешние ключи связаны с информацией о колесах и шинах, и я хочу экспортировать n автомобилей из одной базы данных и импортировать в другую.
Я хочу сделать это, написав набор операторов sql (т.е. набор операторов вставки), которые могут быть загружены импортирующей базой данных, но значения ключей в выгруженных данных не обязательно будут совпадать с существующими данными ( возможно есть дубликаты в некоторых ключевых значениях).
Как лучше всего с этим справиться? Существует ли простой или рекомендуемый способ написания сценария импорта, чтобы удалить зависимости от экспортируемых значений ключей?
В приведенном ниже примере carindex будет называть автомобиль.
CarPartColours связывает одну деталь с определением цвета. В CarPartColours будет несколько строк с одним и тем же CarID.
Я хочу экспортировать все соответствующие строки из carpartcolours, carindex, деталей и цветов, когда пользователь выбирает одну строку в carindex, и импортировать в другую базу данных. Определения цвета в этой базе данных могут быть дубликатами (другая проблема) или иметь те же значения ключей, что и в исходной базе данных.
CREATE TABLE carindex (
ID integer PRIMARY KEY NOT NULL,
Name varchar(50)
);
CREATE TABLE carpartcolours (
ID integer PRIMARY KEY AUTOINCREMENT NOT NULL,
CarID integer,
PartID integer,
ColourID integer,
/* Foreign keys */
FOREIGN KEY (CarID)
REFERENCES carindex(ID)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
FOREIGN KEY (PartID)
REFERENCES parts(ID)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
FOREIGN KEY (ColourID)
REFERENCES colours(ID)
ON DELETE NO ACTION
ON UPDATE NO ACTION
);
CREATE TABLE colours (
ID integer PRIMARY KEY AUTOINCREMENT NOT NULL,
Name varchar(50),
R real,
G real,
B real
);
CREATE TABLE parts (
ID integer PRIMARY KEY AUTOINCREMENT NOT NULL,
Name varchar(50),
Value real,
Manufacturer varchar(50)
);