#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, например, при чтении из базы данных.