2010-05-11 9 views
1

DataSet 스키마를 설명하는 xsd 파일이 있습니다. DataSet을 xml 파일로 디스크에 읽고 쓸 수 있습니다. 필자는 손에서 스키마를 작성하지 않고 XML 파일을 손으로 작성하고 xml 파일에서 스키마를 유추 한 다음 xsd 스키마를 작성했습니다. (일부 amazon.com 물건이 여기에 무슨) 어쨌든 여기xsd에서 해석 된 DataSet 스키마의 문제점

스키마입니다 (나는 ...이 꽤 새로운 오전) :

데이터 집합 스키마를 읽어
<?xml version="1.0" standalone="yes"?> 
<xs:schema id="Items" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> 
    <xs:element name="Items" msdata:IsDataSet="true" msdata:UseCurrentLocale="true"> 
<xs:complexType> 
    <xs:choice minOccurs="0" maxOccurs="unbounded"> 
    <xs:element name="Item"> 
     <xs:complexType> 
     <xs:sequence> 
      <xs:element name="ASIN" type="xs:string" /> 
      <xs:element name="Title" type="xs:string" /> 
      <xs:element name="Offer" minOccurs="0" maxOccurs="unbounded"> 
      <xs:complexType> 
       <xs:sequence> 
       <xs:element name="MerchantName" type="xs:string" /> 
       <xs:element name="Price" type="xs:string" /> 
       </xs:sequence> 
      </xs:complexType> 
      </xs:element> 
     </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
    </xs:choice> 
</xs:complexType> 
</xs:element> 
</xs:schema> 

, 그것은 연결된 두 개의 테이블을 생성 ad-hoc 키에 의해 각 Item에 고유 한 Item_Id라는 이름으로 생성되고 Offer에 매핑됩니다. 그래서 열이있는 항목 테이블 (ASIN, Title, Item_Id)과 열이있는 Offer 테이블 (MerchantName, Price, Item_Id)을 얻습니다.

여기에서 문제는 ASIN이 이미 항목에 대한 고유 식별자이므로 스키마 가져 오기 프로세스가 일부 중복성을 도입하고 코드를 필요 이상으로 어색하게 만듭니다. 이 스키마를 어떻게 변경하여 (ASIN, Title) 및 (ASIN, MerchantName, Price) 테이블 2 개로 끝낼 수 있습니까?

감사합니다.

+0

C# .NET을 같은 것은 없다. 오직 C#. –

답변

2

XSD 스키마는 사용자가 기본 키를 선언하지 않는 한 ID 단위에 대해 임의의 Item_Id를 자동으로 만듭니다.

xsd 스키마의 기본 키 할당이 누락되었습니다.

<xs:unique name="Constraint1" msdata:PrimaryKey="true"> 
     <xs:selector xpath=".//Item" />    
     <xs:field xpath="ASIN"/> 
</xs:unique> 

그런 식으로, 데이터 집합에는 ITEM_ID가 없을 것입니다 및 스키마는 다음과 같이해야합니다

<?xml version="1.0" standalone="yes"?> 
    <xs:schema id="Items" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema"  xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> 
    <xs:element name="Items" msdata:IsDataSet="true" msdata:UseCurrentLocale="true"> 
    <xs:complexType> 
     <xs:choice minOccurs="0" maxOccurs="unbounded"> 
     <xs:element name="Item"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element name="ASIN" type="xs:string" /> 
       <xs:element name="Title" type="xs:string" /> 
       <xs:element name="Offer" minOccurs="0" maxOccurs="unbounded"> 
       <xs:complexType> 
        <xs:sequence> 
        <xs:element name="MerchantName" type="xs:string" /> 
        <xs:element name="Price" type="xs:string" /> 
        </xs:sequence> 
       </xs:complexType> 
       <xs:unique name="Constraint1" msdata:PrimaryKey="true"> 
        <xs:selector xpath=".//Item" />    
        <xs:field xpath="ASIN"/> 
       </xs:unique> 
       </xs:element> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     </xs:choice> 
    </xs:complexType> 
    <xs:unique name="Constraint2" msdata:PrimaryKey="true"> 
     <xs:selector xpath=".//Item" /> 
     <xs:field xpath="ASIN" /> 
    </xs:unique> 
    </xs:element> 
</xs:schema> 
+0

Myra! 감사합니다. 나는 거기에가는 길에 있었지만 그걸 가지고 있지 않았다. – Rich