XML-схема для документов, отображенных в таблицу с автоинкрементным ключом

#xml #database #xsd

#xml #База данных #xsd

Вопрос:

Как правильно определить элемент в XML-схеме, представляющий первичный ключ, реализованный как автоинкрементное целое число в таблице базы данных?

Например, рассмотрим таблицу:

 Person (
 person_id int identity primary key,
 person_name nvarchar(64) null
)
  

С одной стороны, XML-схема должна применять ключевой элемент person_id (я полагаю, minOccurs= 1, nillable= false). С другой стороны, новые документы (которые еще предстоит сохранить) должны проверяться без элемента person_id.

Ответ №1:

Нужно ли использовать одну и ту же схему для входящих и исходящих (могут ли это быть отдельные схемы)?

Предполагая, что ответ на первый — да, я бы поспорил, что соблазн сделать person_id необязательным — потому что это то, что есть.

У нас есть правила, в которых мы используем nillable=»true» в определении XML-элементов, которые всегда должны присутствовать в экземплярах, соответствующих схеме. Использование xsi:nil позволяет приложению обработки различать экземпляры XML, которые непреднамеренно недопустимы по отношению к схеме, и те, которые были созданы и отправлены правильно, но в которых отсутствует информация.

Вы могли бы использовать nillable здесь, но это кажется нелогичным, поскольку на самом деле информация (в момент загрузки) не требуется. Я лично предпочел бы видеть две схемы — одну для «запроса», одну для «ответа».

Кроме того, какова бизнес-цель проверки схемы? Есть ли причина для загрузки схемы после загрузки в базу данных?

Комментарии:

1. Цель состоит в том, чтобы использовать схему для проверки XML-документа, представляющего Person (очевидно). В идеале одна и та же схема должна проверять документ, представляющий «нового» пользователя, для добавления в базу данных, а также существующий документ Person, например, при чтении из базы данных.