样式问题 - 有许多领域的数据库表

时间:2011-01-10 22:19:55

标签: database database-design coding-style

我正在开始一个新项目,我必须解析文档并将其存储在数据库中。本文档包含几个简单键值对的部分 - 大约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

我必须使用关系数据库,所以不要另外建议。

3 个答案:

答案 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