说我有以下XML:
<fooObjects>
<id>1</id>
<name>something</name>
<randomProperty>
<subRandomProperty>5</subRandomProperty>
</randomProperty>
<anotherRandomProperty>1234</anotherRandomProperty>
...
</fooObjects>
<barObjects>
<id>1</id>
<url>elsething</url>
<randomProperty>
<subRandomPropertyX>28</subRandomProperty>
<subRandomPropertyY>15</subRandomProperty>
</randomProperty>
...
</barObjects>
也就是说,有两种类型的实体(foo
和bar
s)遵循基本结构(foo的id和名称,bar的id和amp url),然后有一堆随机属性可以有子节点。
我想创建一个MySQL模式来存储这种数据。我想我需要以下表格:
foo: id [int], name [string]
,
bar: id [int], url [string]
,
node: id [int], name [string], value [string], parent_id [int, foreign key referencing node(id)]
。
其中node
是一个引用自身的垂直键值表,因此嵌套不是问题。
我的问题与如何将foo
和bar
表格与node
相关联。这个关系是一对多的(一个foo
可以有很多nodes
)所以理论上我应该在foo_id
表中使用node
({{1} }})。但这对我来说很奇怪,因为bar
和node
都不属于foo
。此外,bar
不能同时拥有node
并且属于parent
或foo
。也就是说,这三个属性以某种方式排除。
另一个选择是再创建两个表:
bar
,
node_foo_rel: id [int], id_node [int], id_foo [int]
。
这对我来说看起来更干净,但你有完全相同的问题,这是通常用于多对多的模式。
这样做的标准方法是什么?