我正在开始一个新项目,我必须解析文档并将其存储在数据库中。本文档包含几个简单键值对的部分 - 大约10个部分,总共约100对。我每个部分可以有一个表,它们都是一对一地映射到聚合。或者我可以有一个包含大约100个字段的表。我被困了,因为我不想制作一个大的单个表,但我也不想做那么多的一对一映射。那么,我要制作大桌子,还是制作一堆较小的桌子?实际上,据我所知,实际上并没有什么区别。如果有,请通知我。
修改 需要一个例子,所以我会提供一些可能有用的东西。
Document
- Section Title 1
- k1: val1
- k2: val2
...
- Section Title 2
- k10: val10
...
...
- Section Title n
- kn-1: valn-1
- kn: valn
我必须使用关系数据库,所以不要另外建议。
答案 0 :(得分:1)
如果您要存储此大文档的许多实例(现在和/或时间过长),并且此文档的每个实例将具有这些100多列的值,并且你想要在RDBMS中存储所有数据actross行和列所固有的强大功能和灵活性,然后我将它全部存储为一个大的(尽管是丑陋的)表。
如果给定部分中的所有“项目”总是被填充,但是可能会填充或不填充所有部分,那么每个部分有一个表可能是有价值的......但它听起来并不像这样案件。
警惕上面的“如果”。如果它们中的任何一个太不稳定,那么大表的想法可能会比它的价值更加痛苦,而其他想法(例如@ 9000的NoSQL想法)可能会更好。
答案 1 :(得分:0)
Table document(
PK - a surrogate key
name - the "natural" key
)
Table content(
PK - the PK of the parent document
section title
name
value
)
是的,每个文档有100行的名称/值对。但是,您可以轻松添加名称和值,而无需修改数据库。
答案 2 :(得分:0)
如果数据仅用于只读目的,并且您的xml不强制要求更改数据库方案(更改),那么我没有看到任何问题反规范化到单个表。另一种选择可能是查看EAV models