Я сталкивался с этой проблемой несколько раз, и мне интересно, что делают другие люди.
Когда я создаю базу данных, иногда мне приходится импортировать данные в таблицу на регулярной основе, скажем, ежедневно. Обычно я удаляю все записи и заново импортирую каждую запись из внешнего источника данных.
Много раз мне придется хранить еще какие-то данные, которые относятся к импортированным записям, но не из исходного источника импорта. Обычно эти «дополнительные данные» поступают от пользователя. Итак, я создам другую таблицу с первичным ключом, совпадающим с ключом таблицы, который получает импортированные данные, и сохраню эти дополнительные данные в новой таблице. Если это не имеет смысла, вот пример:
В старой унаследованной системе мы храним данные о сотрудниках. Но мне нужно использовать эти данные в веб-приложении, которое не может подключиться к этой старой устаревшей системе. Итак, я создаю базу данных с таблицей, которая соответствует схеме данных, которые у меня есть в старой системе, и я импортирую каждую запись в эту таблицу каждый день. Когда я делаю импорт, я удаляю каждую запись и импортирую каждую запись.
Но в моей новой системе сотрудники могут сохранять биографию. Поэтому в другой таблице я храню это и их идентификатор.
Было бы проще иметь только одну таблицу, но я не могу этого сделать, потому что при импорте я бы отбросил данные, которых нет в другом месте.
Еще одна плохая вещь заключается в том, что, поскольку я удаляю все эти записи для импорта, я не могу определить ограничения внешнего ключа для связанных данных.
Я ненавижу проектировать базы данных таким образом, потому что я знаю, что есть лучший способ. Разве не было бы неплохо, если бы я мог выполнять обновления при импорте данных вместо удаления и импорта всего этого?
Я использую Sql server 2008, но мне интересно услышать о стратегиях, которые могут работать с любой СУБД.