计划在从xml文件导入数据时在MySQL中创建关系表

计划在从xml文件导入数据时在MySQL中创建关系表,mysql,foreign-keys,Mysql,Foreign Keys,下面是一个示例xml文件,我计划将其导入mysql <?xml version="1.0" encoding="utf-8"?> <ShipmentRequest> <Message> <Header> <MemberId>MID-0000001</MemberId> <MemberName>Bruce</MemberName> <D

下面是一个示例xml文件,我计划将其导入mysql

<?xml version="1.0" encoding="utf-8"?>
<ShipmentRequest>
   <Message>
      <Header>
      <MemberId>MID-0000001</MemberId>    
      <MemberName>Bruce</MemberName>
      <DeliveryId>0000001</DeliveryId>
      <OrderNumber>ON-000000001</OrderNumber>
      <ShipToName>Alan</ShipToName>
      <ShipToZip>123-4567</ShipToZip>
      <ShipToStreet>West</ShipToStreet>
      <ShipToCity>Seatle</ShipToCity>
       <Payments>
        <PayType>Credit Card</PayType>
        <Amount>20</Amount>
      </Payments>
      <Payments>
        <PayType>Points</PayType>
        <Amount>22</Amount>
      </Payments>
      <PayType />
      </Header>
    <Line>
      <LineNumber>3.1</LineNumber>
      <ItemId>A-0000001</ItemId>
      <Description>Apple</Description>
      <Quantity>2</Quantity>
      <UnitCost>5</UnitCost>
    </Line>
    <Line>
      <LineNumber>4.1</LineNumber>
      <ItemId>P-0000001</ItemId>
      <Description>Peach</Description>
      <Quantity>4</Quantity>
      <UnitCost>6</UnitCost>
    </Line>
    <Line>
      <LineNumber>5.1</LineNumber>
      <ItemId>O-0000001</ItemId>
      <Description>Orange</Description>
      <Quantity>2</Quantity>
      <UnitCost>4</UnitCost>
    </Line>
  </Message>
</ShipmentRequest>

中期-0000001
布鲁斯
0000001
ON-00000000 1
艾伦
123-4567
西部
西特尔
信用卡
20
要点
22
3.1
A-0000001
苹果
2.
5.
4.1
P-0000001
桃
4.
6.
5.1
O-0000001
橙色
2.
4.
如果我使用mongodb数据库,我会将此文件作为集合中的一条记录导入,但是,由于我要处理MySQL,我认为最好将xml文件中的信息导入并拆分为不同的表:

表1:订单。此表将包含以下信息:

  • MemberId
  • 成员名
  • 送货单
  • 订单号-这将有一个唯一的值
  • 希普顿名称
  • ShipToZip
  • 船坞
  • 船运城市
  • 付款类型1-在本例中为信用卡
  • 付款类型1金额
  • PayType2-第二种付款类型,积分
  • 付款类型2金额
  • 表2:详细信息。这将包含有关已购买产品的信息。在这种情况下,它们是三个:苹果、桃子和橘子。此表将包含以下信息:

  • 项目ID
  • 描述
  • 单位成本
  • 数量
  • 订单号
  • 我认为这两个表将通过OrderNumber键建立关系。如果我没有弄错的话,OrderNumber将作为表2的外键调用

    另一个想法是在导入表1时使用OrderNumber作为主键,因为它将具有唯一值,而不是使用增量主键

    我的问题是,您认为我计划在xml文件中拆分信息的方式是最好的方式吗?或者,如果有更好的方法,请给出建议。我是MySQL的新手,这是我的第一个项目


    我在这篇文章中没有用“xml”来标记,因为问题不在于如何将xml导入mysql。

    我想你打算在这些数据进入数据库后对其进行处理,因此我建议你将设计规范化一点。我的设计如下:

    <?xml version="1.0" encoding="utf-8"?>
    <ShipmentRequest>
       <Message>
          <Header>
          <MemberId>MID-0000001</MemberId>    
          <MemberName>Bruce</MemberName>
          <DeliveryId>0000001</DeliveryId>
          <OrderNumber>ON-000000001</OrderNumber>
          <ShipToName>Alan</ShipToName>
          <ShipToZip>123-4567</ShipToZip>
          <ShipToStreet>West</ShipToStreet>
          <ShipToCity>Seatle</ShipToCity>
           <Payments>
            <PayType>Credit Card</PayType>
            <Amount>20</Amount>
          </Payments>
          <Payments>
            <PayType>Points</PayType>
            <Amount>22</Amount>
          </Payments>
          <PayType />
          </Header>
        <Line>
          <LineNumber>3.1</LineNumber>
          <ItemId>A-0000001</ItemId>
          <Description>Apple</Description>
          <Quantity>2</Quantity>
          <UnitCost>5</UnitCost>
        </Line>
        <Line>
          <LineNumber>4.1</LineNumber>
          <ItemId>P-0000001</ItemId>
          <Description>Peach</Description>
          <Quantity>4</Quantity>
          <UnitCost>6</UnitCost>
        </Line>
        <Line>
          <LineNumber>5.1</LineNumber>
          <ItemId>O-0000001</ItemId>
          <Description>Orange</Description>
          <Quantity>2</Quantity>
          <UnitCost>4</UnitCost>
        </Line>
      </Message>
    </ShipmentRequest>
    
    Member(MemberID, MemberName)
    Order(OrderNumber, MemberID, DeliveryID, ShipToName, ShipToZip, ShipToStreet, ShipToCity, PayType1, PayType1Amount, PayType2, PayType2Amount)
    Item(ItemID, Description)
    Detail(OrderNumber, ItemID, UnitCost, Quantity)
    
    在哪里

    MemberID
    Member
    中的主键,
    OrderNumber
    MemberID
    Order
    中的主键,
    ItemID
    Item
    中的主键,
    OrderNumber
    ItemID
    Detail
    中的主键

    还需要在这些约束之间设置相应的约束