XML 和 Sql Server 2005

Posted

技术标签:

【中文标题】XML 和 Sql Server 2005【英文标题】:XML and Sql Server 2005 【发布时间】:2009-01-06 18:30:49 【问题描述】:

我有一个问题,我想以最好的方式解决。问题是我创建了一个如下所示的架构:

打印("

<xs:complexType name="rentACarT">
    <xs:sequence>
        <xs:element name="poslovnice" type="poslovniceT" />
        <xs:element name="korisnici" type="korisniciT" />
    </xs:sequence>
</xs:complexType>

<xs:complexType name="poslovniceT">
    <xs:sequence>
        <xs:element name="poslovnica" type="poslovnicaT" minOccurs="0" maxOccurs="unbounded" />
    </xs:sequence>
</xs:complexType>

<xs:complexType name="poslovnicaT">
    <xs:sequence>
        <xs:element name="naziv" type="xs:string" />
        <xs:element name="adresa" type="adresaT" />
        <xs:element name="grad" type="gradT" />
        <xs:element name="vozila" type="vozilaT" />
        <xs:element name="zaposlenici" type="zaposleniciT" />
        <xs:element name="posudbe" type="posudbeT" />
    </xs:sequence>
    <xs:attribute name="id" type="xs:int" />
</xs:complexType>

<xs:complexType name="vozilaT">
    <xs:sequence>
        <xs:element name="vozilo" type="voziloT" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
</xs:complexType>

<xs:complexType name="zaposleniciT">
    <xs:sequence>
        <xs:element name="zaposlenik" type="zaposlenikT" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
</xs:complexType>

<xs:complexType name="korisniciT">
    <xs:sequence>
        <xs:element name="korisnik" type="korisnikT" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
</xs:complexType>

<xs:complexType name="posudbeT">
    <xs:sequence>
        <xs:element name="posudba" type="posudbaT" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
</xs:complexType>


<xs:complexType name="posudbaT">
    <xs:sequence>
        <xs:element name="idVozila" type="xs:int" />
        <xs:element name="jmbgZaposlenika" type="jmbgT" />
        <xs:element name="jmbgKorisnika" type="jmbgT" />
        <xs:element name="datumPosudbe" type="xs:date" />
        <xs:element name="ugovoreniDatumPovratka" type="xs:date" />
        <xs:element name="stvarniDatumPovratka" type="xs:date" />
    </xs:sequence>
    <xs:attribute name="id" type="xs:integer" />
</xs:complexType>

<xs:complexType name="voziloT">
    <xs:sequence>
        <xs:element name="registracija" type="xs:string" />
        <xs:element name="modelVozila" type="modelVozilaT" />
        <xs:element name="godinaProizvodnje" type="godinaT" />
        <xs:element name="cijenaPosudbePoDanu" type="xs:double" />
    </xs:sequence>
    <xs:attribute name="id" type="xs:int" />
</xs:complexType>

<xs:complexType name="zaposlenikT">
    <xs:sequence>
        <xs:element name="ime" type="xs:string" />
        <xs:element name="prezime" type="xs:string" />
        <xs:element name="spol" type="spolT" />
        <xs:element name="datumZaposlenja" type="xs:date" />
        <xs:element name="grad" type="xs:double" />
    </xs:sequence>
    <xs:attribute name="jmbg" type="jmbgT" />
</xs:complexType>

<xs:complexType name="korisnikT">
    <xs:sequence>
        <xs:element name="ime" type="xs:string" />
        <xs:element name="prezime" type="xs:string" />
        <xs:element name="spol" type="spolT" />
        <xs:element name="adresa" type="adresaT" />
        <xs:element name="grad" type="gradT" />
        <xs:element name="status" type="statusKorisnikaT" />
    </xs:sequence>
    <xs:attribute name="jmbg" type="jmbgT" />
</xs:complexType>

<xs:complexType name="modelVozilaT">
    <xs:sequence>
        <xs:element name="tipVozila" type="tipVozilaT" />
        <xs:element name="marka" type="xs:string" />
        <xs:element name="model" type="xs:string" />
    </xs:sequence>
</xs:complexType>

<xs:simpleType name="tipVozilaT">
    <xs:restriction base="xs:string">
        <xs:enumeration value="auto" />
        <xs:enumeration value="kombi" />
        <xs:enumeration value="kamion" />
        <xs:enumeration value="limuzina" />
    </xs:restriction>
</xs:simpleType>

<xs:simpleType name="godinaT">
    <xs:restriction base="xs:int">
        <xs:minInclusive value="1980" />
        <xs:maxInclusive value="2050" />
    </xs:restriction>
</xs:simpleType>

<xs:simpleType name="jmbgT">
    <xs:restriction base="xs:string">
        <xs:pattern value="([0-9])13" />
    </xs:restriction>
</xs:simpleType>

<xs:simpleType name="spolT">
    <xs:restriction base="xs:string">
        <xs:enumeration value="m" />
        <xs:enumeration value="f" />
    </xs:restriction>
</xs:simpleType>

<xs:simpleType name="statusKorisnikaT">
    <xs:restriction base="xs:string">
        <xs:enumeration value="stalni" />
        <xs:enumeration value="novi" />
    </xs:restriction>
</xs:simpleType>

<xs:complexType name="gradT">
    <xs:sequence>
        <xs:element name="postanskiBroj" type="xs:int" />
        <xs:element name="naziv" type="xs:string" />
    </xs:sequence>
</xs:complexType>

<xs:complexType name="adresaT">
    <xs:sequence>
        <xs:element name="ulica" type="xs:string" />
        <xs:element name="kucniBroj" type="xs:int" />
    </xs:sequence>
</xs:complexType>

");

现在,我不想将整个 xml 文档放在一行中。至少我觉得不好。 我想将“poslovnice”(包含多个“poslovnica”)移到一个表中,将“vozila”移到另一个表中...... 将每个“poslovnica”放在表 Poslovnica 的一行中还是将所有元素“poslovnica”放在一行中更好? 既然SQL Server不支持唯一的xml数据类型,那么唯一性呢,我看到你可以使用触发器和函数,还有其他方法吗? 另外,如果我破坏了xml文档,并且在一个表中有poslovnice而在另一个表中有他们的vozila,如何实现显示vozilo属于poslovnica,我应该在xml中的每个vozilo中放置poslovnica的id还是应该在SQL中引用行服务器?

或者你会推荐其他一些数据库吗?

非常感谢,如果我不够清楚,我很抱歉:(!

米罗斯拉夫

【问题讨论】:

【参考方案1】:

首先你必须问自己为什么要将它以 XML 形式存储在数据库中? 这似乎是一个完美的场景,拥有 Poslovnica、Vozilo 和 Zaposlenik 表,并拥有包含哪些员工在哪里租用什么车的信息的中间表。

我完全没有理由将其存储在 xml 中。

【讨论】:

以上是关于XML 和 Sql Server 2005的主要内容,如果未能解决你的问题,请参考以下文章

将 XML 转换为表 SQL Server 2005

通过 Web 服务将 SQL Server CE 与 SQL Server 2005 同步

尝试将 XML 内容存储到 SQL Server 2005 中失败(编码问题)

如何在 SQL Server 2005 中插入值数组?

我想要把sql serve2000的mdf ldf文件升级到能在sql2012中用 求大神帮忙转换

sql serves附加数据库是遇到这样的问题怎么解决?