如何处理MySQL中的动态列

时间:2012-10-14 13:50:22

标签: php mysql cakephp

我的网站有不同类型的产品,每种产品都有不同的规格。

我希望能够只使用一个带有一组列的产品表,但由于列的不同取决于具体类型,我必须创建适合每种类型的多个产品表。我认为这是一个耗时且不是真正有效的方法来管理作为一个持续的解决方案。

有没有一种很好的方法可以使用数据库管理这种类型的场景?

我正在使用Cakephp作为框架。

3 个答案:

答案 0 :(得分:1)

规范化您的数据结构:例如,有一个product_info表(FK进入products表),其中包含key列和value列,以表示有关每个产品。

答案 1 :(得分:0)

Martin Fowler列出了三种一般方法。

  • Single table - 将所有列放在一个表中,只使用您需要的列(这听起来与您所拥有的最接近)
  • Class table - 所有类都有自己的表,存储特定于该类的数据(在每个相关表中使用相同的主键)
  • Concrete table - 与上面相同,但只有具体的类有表,而不是抽象的。

单表是最简单的,除非你有充分的理由不 - 只是拥有所有可能的字段,并且只使用你在每个类中需要的字段。你确实有一个缺点,就是无法强制执行NOT NULL;如果这很重要,可以根据对象的类型制作自定义约束,或使用选项2或3。

答案 2 :(得分:0)

我之前写过关于使用带蛋糕的EAV模型的文章,我认为这篇文章可能会有所帮助,但有些过时了。 http://nuts-and-bolts-of-cakephp.com/2010/07/27/keyvalue-tables-and-how-to-use-them-in-cakephp-1-3/

此外,这可能对您的特定问题非常有帮助...请查看并研究Magento(一种非常流行的基于PHP的电子商务框架)中的一些概念,大量使用EAV架构并执行很好的索引和扁平化数据。

你当然可以在EAV实施方面获得很多有趣的观点。无论你喜欢与否,都是一个不同的故事:)