2 XML Imports - Разработка базы данных - PullRequest
1 голос
/ 26 октября 2010

SQL Server 2008.

Утро,

Если бы кто-то мог предложить свой совет, он был бы очень признателен.

В настоящее время я хочу импортировать два XML-файла: сумму пожертвования и программу создания пожертвований.

Файл «Сумма пожертвования» будет содержать поле «Сумма» и DonationMakerID, а файл «Создатель пожертвования» будет содержать поле «Имя» и DonationMakerID. Создатель пожертвований внесет пожертвование определенной суммы, возвращенной в файл сумм.

Моя проблема заключается в том, что я иногда получаю файл суммы пожертвования с идентификатором создателя пожертвования, который не относится к создателям пожертвований, которые в настоящее время находятся в базе данных, но, вероятно, будет связан с идентификатором пожертвования в XML-файле Donation Maker, который я получу позже этим днем.

Теперь, как лучше всего хранить информацию о сумме пожертвования, пока я не получу файл создателя пожертвования? Я, очевидно, не мог загрузить файл суммы пожертвования, пока у меня не будет соответствующего Donation MakerID, но я предпочел бы загрузить файл, как и когда я получу их.

В идеале мне нужно ограничение FK, которое только обеспечивает ссылочную целостность в таблице суммы пожертвования для идентификаторов, которые уже существуют в таблице создателя пожертвования…

У меня есть несколько идей, например, два столбца в dbo.DonationAmount из DonationMakerID и XMLDonationMakerID, где DonationMakerID может разрешать NULL. Затем, когда я получаю файл суммы пожертвования, я загружаю DonationMakerID в поле XMLDonationMakerID и, если в таблице создателя есть соответствующий идентификатор, я загружаю его в столбец пожертвования makerID, в противном случае я оставляю его пустым. Затем, когда я получаю последующие XML-файлы Donation Maker, я могу проверить поле XMLDonationMakerID по идентификатору в XML-файле Donationmaker, и если я найду тот, который соответствует обновлению DonationMakerID.

Надеюсь, все это имеет смысл.

Большое спасибо

Ответы [ 2 ]

1 голос
/ 27 октября 2010

Во-первых, можете ли вы дождаться получения второго файла и обработать его в правильном порядке? Или вы можете заставить их отправить их одновременно или донорский файл первым? Решение проблемы с выбором времени - первый, лучший выбор.

Если это невозможно, переместите неверные записи в отдельную таблицу, чтобы можно было поддерживать ограничения внешнего ключа (очень важно не избавиться от ограничений.) Затем проверьте эту таблицу после второго импорта и добавьте все записи после ввода правильного донора. Что бы вы ни делали, вы не хотите помещать данные в рабочую таблицу до тех пор, пока с ними не будут связаны связанные данные, или у вас не будет ненужного мусора база данных. И избавление от необходимого ограничения FK для этого является гарантией других проблем с целостностью данных в будущем.

1 голос
/ 26 октября 2010

Не могли бы вы, возможно

  • определить, когда DomainMakerID еще не существует
  • если это так: добавьте новую запись в вашу таблицу DomainMaker и отметьте ее как «временную» или «временную» или что-то еще
  • как только вы получите DomainMaker с этим новым идентификатором, обновите строку и удалите «временный» флаг

Нечто подобное должно работать (я надеюсь!) И позволять вам вставлять ваши данные из XML.

...