2011-07-20 2 views
2

J'ai des données non structurées qui décrivent le réglage pour chaque périphérique. Par exemple pour appareil 1:Type de données XML dans SQL Server?

<ChartSetting xmlns="ChartSetting1"> 
    <ChartSizeX>132.6</ChartSizeX> 
    <ChartSizeY>132.6</ChartSizeY> 
    <ChartType>Native</ChartType> 
    <BarSizeX>90</BarSizeX> 
    <BarSizeY>6</BarSizeY> 
    <DistToBar>34.8</DistToBar> 
    <DistToFirstLineY>17.5</DistToFirstLineY> 
    <MarkerDistance>120</MarkerDistance> 
    <DistToFirstField>18.5</DistToFirstField> 
    <PatchSizeX>7.5</PatchSizeX> 
    <PatchSizeY>9</PatchSizeY> 
</ChartSetting> 

Toutefois, pour l'appareil 2 réglage est différent

<ChartSetting xmlns="ChartSetting2"> 
    <PatchGap>1</PatchGap> 
    <PatchSize>5</PatchSize> 
</ChartSetting> 

données xml n'est pas utilisé à des fins de recherche, il sera transmis à l'application .net qui envoient finalement à la devicedriver (par le biais du code C++) Nous avons seulement quatre types de périphérique. Donc, la possibilité de différents réglages est limitée.

  1. Est-ce que ce type de données peut être stocké en tant que XML typé qui adhère à un schéma? Stocker en tant que varchar sera cauchemar si des paramètres invalides sont stockés.

    Je sais que la collection de schémas xml peut avoir plusieurs schémas, mais peut-elle confirmer un seul schéma.

  2. Existe-t-il un moyen facile de créer un schéma?

  3. Devrais-je utiliser XML non typé à la place?

+0

Je recommande de simplement le stocker en tant que type de données 'XML' - pas de schéma. Tant que vous ne voulez pas l'interroger, il n'y a vraiment aucune raison impérieuse d'avoir des schémas en place. Mais avoir le type de données 'XML' aide - il stocke le XML plus efficacement qu'un champ' varchar (MAX) '. –

Répondre

0

1. Je pense qu'il est possible, si votre collection de schéma contient 4 schémas différents, la colonne liée peut contenir xml qui satisfait un des schémas de la collection.
2.Je crois que la façon la plus simple est de laisser sql server créer un schéma pour vous (créez des tables ChartSetting1, ChartSetting2 avec des colonnes souhaitées - ce n'est pas nécessairement, vous pouvez créer SELECT qui retourne toutes les colonnes, mais en utilisant des tables est plus facile), puis

DECLARE @mySchema NVARCHAR(MAX); 
SET @mySchema = N''; 
SET @mySchema [email protected] + 
(
    SELECT * FROM ChartSetting1 
    FOR XML AUTO, ELEMENTS, XMLSCHEMA('ChartSetting1') 
); 

SET @mySchema [email protected] + 
(
    SELECT * FROM ChartSetting2 
    FOR XML AUTO, ELEMENTS, XMLSCHEMA('ChartSetting2') 
); 

CREATE XML SCHEMA COLLECTION [name] AS @mySchema; 

-- we don't need these tables , drop them 
DROP TABLE ChartSetting1,ChartSetting2 

3. Cela dépend. Je dirais que si vous avez besoin de contraindre les données XML au-delà de la validation du schéma, il est logique d'utiliser du XML non typé. Si la validation du schéma couvre tous les aspects de la validation des données, pourquoi ne pas l'utiliser?

-2

XML devrait réellement être stocké dans une base de données au format XML. XML est plus un moyen de transport que des données. Comme vous le dites, c'est gros et difficile à interroger. Vous devez stocker vos données sous forme de données (varchar int ect) puis utiliser PATH MODE pour vous les renvoyer dans le format souhaité

+1

Ce n'est pas le cas pour les données non structurées. – GSerg

2

Vous pouvez créer une DTD pour les quatre types de périphériques différents et valider vos fragments XML avec ces DTD, mais je vous suggère de faire ce traitement en dehors de SQL Server.

Si vous n'interrogez pas le code XML, il n'y a aucune raison de le stocker en tant que type de données XML.

réponses à vos questions:

  1. XML typées: vous devez utiliser un type spécifique par colonne (voir http://msdn.microsoft.com/en-us/library/ms184277.aspx)
  2. créer un schéma - Check out (http: // msdn. microsoft.com/en-us/library/ms176009.aspx) et essayez quelque chose comme XMLSpy si cela devient trop complexe. Vos extraits avaient l'air petit donc je pense que vous pouvez le gérer avec le Bloc-notes/++
  3. J'utilise XML typées et valident quand il est stocké et/ou récupéré
+0

>> Si vous n'allez pas interroger le XML, il n'y a aucune raison de le stocker en tant que type de données XML? Quelles sont les alternatives? Stocker dans un format relationnel ..? ou comme varchar et faire l'analyse dans l'application client. – Cshah

0
  1. Je pense qu'il est Impossible de créer un schéma conforme aux deux XML.
  2. De nombreux éditeurs XML peuvent créer XSD à partir de XML, par exemple: Visual Studio
  3. Typed XML vs. Untyped XML
Questions connexes