Допустим, у меня есть база данных для хранения (числовых) точек данных.Точки данных группируются в наблюдения.Каждая точка данных принадлежит одному или нескольким наблюдениям, а каждое наблюдение имеет одну или несколько точек данных.Итак, у меня есть три таблицы:
CREATE TABLE `data` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`time` datetime NOT NULL,
`value` int(11) NOT NULL,
PRIMARY KEY (`id`),
) ENGINE=InnoDB ;
CREATE TABLE `obs` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`datetime` datetime NOT NULL,
`posthoc` tinyint(1) NOT NULL,
`comments` varchar(500) NOT NULL,
PRIMARY KEY (`id`),
) ENGINE=InnoDB ;
CREATE TABLE `on_obs_data` (
# linker or bridge table or whatever these are called
`id_obs` int(11) NOT NULL,
`id_data` int(11) NOT NULL,
KEY `id_obs` (`id_obs`),
KEY `id_data` (`id_data`),
CONSTRAINT `on_obs_data_ibfk_1` FOREIGN KEY (`id_obs`) REFERENCES `obs` (`id`),
CONSTRAINT `on_obs_data_ibfk_2` FOREIGN KEY (`id_data`) REFERENCES `data` (`id`)
) ENGINE=InnoDB ;
Проблема в том, как мне заполнить эти три таблицы из одной электронной таблицы (или, в зависимости от обстоятельств, одной промежуточной таблицы, заполненной с помощью LOAD DATA LOCAL INFILE
)?Я могу заполнить data
и obs
по отдельности без проблем, но on_obs_data
необходимо знать идентификаторы вновь созданных записей в двух таблицах.Никакая информация между data
и obs
не перекрывается, и записи в соответствующих записях не гарантируются уникальными, кроме id
s, которые генерируются базой данных при вставке.Единственное, что связывает данную запись data
с данной записью obs
, это тот факт, что они изначально находились в одной строке таблицы.
Я ищу решения, которые можно реализовать внутри MySQL.без использования сценариев на стороне клиента.