如何设计一组具有动态属性的数据库表?

时间:2013-09-12 18:32:15

标签: mysql sql mongodb cassandra database

现在我遇到了问题:

对于同一个表(类别)中的某些项,它们可能具有不同的属性。例如,有一个名为Product的表,其中包含两个名为A和B的项。

A的属性为id, name, attr01, attr03, attr04

B所拥有的属性为id, name, attr02, attr03, attr05, attr06

可能会有更多这样的项目。

对于每个attrXX属性,其格式如下:

    [attrbute_name, 
    {column_id: 01, column_name: xxx, relationship: xxx, value: xxx, unit: xxx},
    {column_id: 02, column_name: xxx, relationship: xxx, value: xxx, unit: xxx},
    {column_id: 03, column_name: xxx, relationship: xxx, value: xxx, unit: xxx},
    ...]

attr中的列数不固定。

我有点困惑,因为这与我之前设计的数据库完全不同。因此,我想问你们如何设计一组表格,用于存储上述格式的数据。我将使用的数据库是MySQL。所以我想在MySQL环境中找到一个解决方案。

我也听说过我可以使用像MongoDB或Cassandra这样的NoSQL数据库来解决这个问题。你能告诉我如何使用这样的NoSQL数据库来解决我的问题吗?我不确定我的客户会接受它,但我想把它介绍给他。

1 个答案:

答案 0 :(得分:0)

这看起来与我有关系。

您将拥有以下表格:

Product (id, name)
Attribute (id, name)
ProductHasAttribute (ProductId, AttributeId)
Column (id, AttributeId, name, relationship, value, unit)

ProductHasAttribute的内容为:

A, 1
A, 3
A, 4
B, 2
B, 3
B, 5
B, 6

获取产品P的所有属性:

select A.name
from ProductHasAttribute PA
inner join Attribute A on A.id = PA.AttributeID
where PA.ProductID = P

可能需要更改列,具体取决于值是仅依赖于属性,还是取决于产品。