2011-11-01 57 views
0

我一直在考虑将产品/客户/和交易信息存储在数据库中的最佳方式。我们正在谈论数十万这里记录...noSQL/MySQL - 存储产品信息

我有关于如何将数据会在纸上来表示,它基本上看起来像一棵树一个非常明确的想法...

汽车 - > VW - >高尔夫 - > 1.6升5门

这里的问题是树中的每个产品都需要不同的属性。例如,如果产品是小船,它不需要“轮子尺寸”属性,但需要“螺旋桨尺寸”。无论如何,你明白了!

我对NoSQL非常陌生,过去只使用过MySQL,但似乎它可能是最好的解决方案。我喜欢没有模式的想法。

有没有人有任何建立此类系统的经验?你做了什么?任何特定的变体?

回答

2

如果您需要关系结构(例如树结构),那么您应该使用关系数据库模型。 NoSQL最适合您只想存储数据而不考虑其结构的情况。

如果您想拥有一组可选信息,您可以使用关系数据库并使用BLOB列来存储可选数据,可能是JSON字符串。这可能最有效的原因如下:

  1. 您可以保留轻松查询一组产品的能力,例如, SELECT * FROM products WHERE catid = 123
  2. 您仍然可以使用产品的通用属性轻松过滤结果。
  3. 您还可以将您的交易记录重新链接到产品。
  4. 如果您想按可选列过滤,可以执行LIKE以仅返回包含JSON blob中特定列名称的行,然后手动过滤代码中的结果。
0

我认为这可能是一个好主意,除非你需要某种关系。例如,如果您想将汽车连接到车主,那么通常会有一张桌子“汽车”和一张桌子“所有者”,如果您想按所有者查找汽车,您可以向所有者搜索并加入汽车。

我相信在大多数情况下,可以在NO-SQL设置中解决这个问题,但它可能会变得非常复杂。

如果你只是存储模型数据,它认为听起来很直截了当。也许你可以原型呢?

+0

是的,这是真正的问题,关系将是需要的(链接引号等产品...) – user948844

1

您正在查找的内容可以很容易地在文档中呈现(面向DB =>,例如CouchDB)。例如,为了表示你的VW:

  • 汽车 - > VW - >高尔夫 - >1.6升5门:
{ 
"Cars": [ 
    {"Make":"VW", "Model":"Golf", "Engine":1.6, "Doors": 5, "Wheel Size": 19}, 
    {"Make":"Toyota", "Model":"Supra", "Engine":2.4, "Doors": 5, "Packages":["Tech", "Cold Weather"]} 
] 
} 

由于模式是 “免费”,你可以添加删除汽车的属性。你可以阅读更多关于CouchDB文档API here