存储每个资产的自定义参数的最佳方法

时间:2012-10-03 18:45:39

标签: php mysql database

我有一张表格,其中包含我所拥有的每项资产(笔记本电脑,屏幕,桌面,扫描仪等)的信息。我还有另一个表格,其中我有每个资产的自定义列(因此对于特定桌面我可以有一个名为“颜色”的自定义列)...快速shematic:

资产表

AssetID     Description
---------------------------
1           Desktop HP79801

资产自定义列

AssetID     Column1     Column2
-----------------------------------
1           Color       BluRay ?

现在我想存储每列的值。我目前为每个单位做的方式是:

AssetID     UnitID      Column1     Column2
-----------------------------------
1           1           Blue        Yes
1           2           Blue        No
1           3           Black       No
1           4           Blue        Yes

现在我的问题是,有没有更有效的方法来做到这一点,我怎样才能以高效的方式将列数增加到无穷大?有可能吗?

最后,如何有效地存储自定义产品属性?

2 个答案:

答案 0 :(得分:2)

简而言之,是的。

你所拥有的东西丝毫不具备可扩展性。你想要的是拥有一个资产表,一个自定义参数表和一个“链接”表。然后,在链接表中输入多个值,而不是多个列。

举个例子:

资产表

AssetID     Description
---------------------------
1           Desktop HP79801

属性列

AssetAttr       Column1     
-----------------------------------
1               Color
2               Size

链接表

AssetID     UnitID      AttrId        AttrValue 
-----------------------------------
1           1           1             Blue
1           1           2             Big
1           2           1             Orange
1           2           2             Giant

如果您的属性都是特定于模型的,您可能还想在资产自定义列中添加AssetId列,但除非您的所有资产都没有共享属性,否则我不会亲自执行此操作。< / p>

您可能还想进一步标记。您可能希望使用数据类型注释属性表,并且可能有另一个与包含可能数据值的属性表相关的表,然后在链接表中插入上述表中的条目ID。

答案 1 :(得分:0)

另一种解决方案是完全使用模式减去db。我最喜欢的是Mongo。另一个选项是CouchDB或其中一个键值数据库。

不要在这里开始一场noSQL战争,但是这些数据库可以更优雅地处理这样的情况 - 单个文档可以存储所有数据并在没有任何连接或视图的情况下进行检索。