Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 SQLXML+XSD  [new]
Vitta
Member

Откуда: Санкт-Петербург
Сообщений: 2
Здравствуйте! Прошу помощи.

Есть SQL БД, в ней связанные таблицы:

1. Специальности - Specs (SpecId, Name)
2. CoursesToSpecs (SpecId, CourseID)
3. Предметы - Courses (CourseID, Name)
4. CoursesToPersons (CourseID, PersonID)
5. Преподаватели - Persons (PersonID, Name)


Необходимо выбрать все значения Persons.Name, соответствующие определенной специальности (SpecID) и курсы, которые каждый препод читает. Связь между преподавателями и соответствующей специальностью только через курсы (преподаватель читает курс, который относится к этой специальности).

Создаю аннотированную схему:

<?xml version="1.0" encoding="windows-1251" ?>

<xs:schema id="teachers"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema">

<xs:element name="Spec" type="Spec" sql:relation="Specs" sql:key-fields="SpecID" />

<xs:complexType name="Spec">
<xs:sequence>
<xs:element name="Name" type="xs:string" sql:field="Name" />
<xs:element name="Person" type="Person" sql:relation="Persons">
<xs:annotation>
<xs:appinfo>
<sql:relationship
parent="Specs"
parent-key="SpecID"
child="CoursesToSpecs"
child-key="SpecID" />
<sql:relationship
parent="CoursesToSpecs"
parent-key="CourseID"
child="PersonsToCourses"
child-key="CourseID" />
<sql:relationship
parent="PersonsToCourses"
parent-key="PersonID"
child="Persons"
child-key="PersonID" />
</xs:appinfo>
</xs:annotation>
</xs:element>
</xs:sequence>
<xs:attribute name="SpecID" type="xs:integer" sql:field="SpecID" />
</xs:complexType>

<xs:complexType name="Course">
<xs:sequence>
<xs:element name="Name" type="xs:string" sql:field="LastName" />
</xs:sequence>
<xs:attribute name="CourseID" type="xs:integer" sql:field="CourseID" />
</xs:complexType>


<xs:complexType name="Person">
<xs:sequence>
<xs:element name="Name" type="xs:string" sql:field="LastName" />
<xs:element name="Course" type="Course" sql:relation="Courses />
</xs:sequence>
<xs:attribute name="PersonID" type="xs:integer" sql:field="PersonID" />
</xs:complexType>

</xs:schema>


В результате в XML-документе получаю


<Data>
<Spec SpecID="10">
<Name></Name>
<Person PersonID="8">
<Name></Name>
</Person>
<Person PersonID="8">
<Name></Name>
</Person>
<Person PersonID="8">
<Name></Name>
<Course CourseID="97">
<Name></Name>
</Course>
<Course CourseID="105">
<Name></Name>
</Course>
<Course CourseID="94">
<Name></Name>
</Course>
</Person>
</Spec>
</Data>


Проблема в том, что каждый преподаватель читает несколько курсов, поэтому в результирующем XML-документе дублируются <Person></Person> , соответствующие одному человеку. И только в последнем элементе, касающемся препода перечисляются его курсы.
Уфф. Не знаю, все ли правильно/понятно изложила....
Но мОжно ли как-то средствами XSD от этого избавиться? (Что-то типа DISTINCT.. по значению)

Буду благодарна за любую помощь и пинки в нужном направлении...
С уважением, Vitta.
20 ноя 04, 22:41    [1123246]     Ответить | Цитировать Сообщить модератору
 Re: SQLXML+XSD  [new]
джиммерс
Member

Откуда:
Сообщений: 216
Все-таки тут два вопроса или нет:

1. Необходимо выбрать все значения Persons.Name, соответствующие определенной специальности (SpecID)
2. Необходимо выбрать курсы, которые каждый препод читает.

?
20 ноя 04, 23:56    [1123276]     Ответить | Цитировать Сообщить модератору
 Re: SQLXML+XSD  [new]
Vitta
Member

Откуда: Санкт-Петербург
Сообщений: 2
МОжно считать, что вопрос один: неободимо выбрать все курсы, которые читает препод данной специальности. Вопрос в том, как исключить дублирующиеся элементы, которые в результате моей XSD-схемы получаются.

С уважением, VItta.
22 ноя 04, 11:55    [1124761]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить