#sql-server-2008 #integrity #identity-insert
#sql-server-2008 #целостность #идентификация-вставка
Вопрос:
Я импортирую данные из устаревшего приложения (php mysql) в переписанную версию (sql server 2008 и mvc3). В настоящее время я нахожусь в процессе написания пакета синхронизации / преобразования БД.
Данные mysql имеют первичные ключи, но по какой-то причине не имеют внешних ключей, и поскольку данные по-прежнему являются реляционными (несмотря на отсутствие внешних ключей), мой пакет преобразования использует включение / выключение IDENTITY_INSERT. Поскольку исходные данные не могут обеспечить целостность данных, я хотел бы выполнить проверку целостности после выполнения вставки и отключить IDENTITY_INSERT.
Есть ли хороший способ написать сценарий этого действия? Предпочтительно на уровне таблицы, а не всей базы данных?
Спасибо.
Комментарии:
1. Вы можете загрузить данные в промежуточные таблицы. Проверьте и очистите данные, прежде чем перемещать их в «живые» таблицы, содержащие ваши идентификационные поля.
2. Спасибо, Тони. Это тоже хорошая идея. Я просто не хочу усложнять ситуацию для тех, кто устанавливает это, поскольку оно должно быть развернуто на X количество клиентов. Достаточно выполнить проверку целостности и сообщить о найденных несоответствиях. Мне просто нужно знать, как запустить проверку целостности.
Ответ №1:
Лично я бы определил, какие данные не имеют целостности, прежде чем импортировать в новую схему. Это сделает простой запрос WHERE NOT Exists для каждой дочерней таблицы (или того, что должно быть спроектировано как дочерняя таблица). Я бы не стал импортировать данные, которые не могут быть привязаны к родительской записи. Однако я бы создал таблицу исключений и переместил в нее эти записи, а некоторые пользователи посмотрели, могут ли они определить, какими должны быть родительские данные.
Комментарии:
1. Спасибо за конструктивный ответ. Я рассмотрел это, и этот подход будет действительным, если ожидается большое количество несоответствий. Работая с версией приложения для разработки и тестовым набором данных, я на самом деле не обнаружил никаких проблем с отношениями. Эта проверка целостности будет просто безотказной. Честно говоря (вы можете называть меня ленивым) Я не хочу еще больше усложнять ситуацию, добавляя совершенно новый набор таблиц для ошибок и механизм проверки взаимосвязей во время миграции. Хотя я, конечно, буду иметь это в виду.