我最近在Flattening XML Data into a database schema with XMLSpy问过这个问题,但我仍然在努力解决这个问题。它也不是一个真正的XMLSpy问题,所以我以不同的方式重新发布它。
当元素可以出现在层次结构中的多个位置时,将XML元素映射到数据库表的最佳或最标准的方法是什么?
例如:
<?xml version="1.0" encoding="UTF-8"?>
<a>
quux
<b>
corge
<c>
grault
<d>
garply
<e>
waldo
<f>foo</f>
</e>
</d>
<e>
fred
<f>bar</f>
</e>
</c>
<e>
plugh
<f>baz</f>
</e>
</b>
<e>
xyzzy
<f>qux</f>
</e>
</a>
请注意,<e>
元素(复杂,因为它包含<f>
元素)可以是<a>
,<b>
,<c>
的子元素,或<d>
。
将此映射到表结构:
是不切实际的因为E实际上是多个表(A,B,C和D)的子表。
解决此问题的最佳方法是什么?
创建多个E表,每个可能的关联一个:
为每个可能的关联添加一个fk到E:
反转间接(仅当<e>
发生0-1次时才有效):
向E添加“父”指示符(例如:(2,“A”,1,69,42),表示“1的外键引用表A中带有主键的记录1“):
将其视为多对多关联,并为每个可能的父级构建映射表:
还有别的吗?
这些对我来说都不是理想的。
答案 0 :(得分:0)
可能是6岁。
A: (a_pk, a)
B: (b_pk, b)
C: (c_pk, c)
D: (d_pk, d)
E: (e_pk, e, f)
带链接表
L: (l_pk, parent_pk, child_pk)