Проблема вложенных таблиц поколения класса XSD

Когда индекс (составной или нет) используется для «сортировки», MySQL считывает данные по порядку и не выполняет сортировку вообще. Это невозможно с несколькими индексами.

Возможно упорядоченное чтение по 1-му индексу, а затем сортировка файлов, но вряд ли это будет быстрее, поэтому MySQL этого не делает.

Если вам действительно нужно это сделать, вы можете использовать такой подзапрос, как этот:

    SELECT ...
    FROM (
            SELECT primary_key
            FROM table1
            ORDER BY field1
            LIMIT 15
    ) tmp
    JOIN table1 t ON t.primary_key = tmp.primary_key
    ORDER BY field1, field2

Это может быть полезно, когда у вас есть LIMIT и по какой-то причине вы не можете добавить составной индекс .

5
задан freggel 29 January 2009 в 11:52
поделиться

3 ответа

У меня была та же проблема.. если действия не являются проблемой, можно использовать XSLT для переименования "дочерних" таблиц, которые имеют то же имя, (т.е. получающееся имя является конкатенацией имени таблицы и его родителя):

 ...
  <xsl:template match="*">
     <xsl:param name="parentElm">
       <xsl:value-of select="name(..)" />
     </xsl:param>
     <xsl:choose>
       <xsl:when test="local-name() = 'Contact'">
         <xsl:element name="{concat('Contact',$parentElm)}">
           <xsl:apply-templates select="@* | node()" />
         </xsl:element>
       </xsl:when> <xsl:otherwise>
         <xsl:element name="{local-name()}">
           <xsl:copy-of select="@*" />
           <xsl:apply-templates select="@* | node()" />
         </xsl:element>
       </xsl:otherwise>
     </xsl:choose>   </xsl:template> ...
2
ответ дан 15 December 2019 в 06:37
поделиться

Я предложил бы простое переименование объектов схемы плюс использование группировки (показанный ниже), или xsd включает (при необходимости в этом составном типе для других схем). Это должно решить к проблеме, если у Вас есть не твердый requirment на именах.

На основе опыта я не думаю, может инструменты работать с повторным именованием в Вашем примере.

Что-то вроде этого может добиться цели:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="XSDobject" targetNamespace="http://tempuri.org/XSDobject.xsd" elementFormDefault="qualified" xmlns="http://tempuri.org/XSDobject.xsd" xmlns:mstns="http://tempuri.org/XSDobject.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:group name="Contact">
    <xs:sequence>
      <xs:element name="name" type="xs:string" />
      <xs:element name="phone" type="xs:string" />
    </xs:sequence>
  </xs:group>
  <xs:element name="order">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="OrderContact">
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="Contact"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="buyer">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="BuyerContact">
                <xs:complexType>
                  <xs:sequence>
                    <xs:group ref="Contact"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>
1
ответ дан 15 December 2019 в 06:37
поделиться

Возможно, вы можете использовать xsd: import / xsd: include, чтобы разделить xsd на несколько файлов, а затем использовать xsd.exe для компиляции каждого из них. Я думаю, вы можете указать пространство имен для генерации кода при работе с xsd.exe.

Я работал с генерацией классов из xsd: sa пару лет назад, и по какой-то причине я решил использовать xsdobjgen.exe вместо xsd .exe.

Удачи!

0
ответ дан 15 December 2019 в 06:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: