1

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

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

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

我使用 Cakephp 作为框架。

4

3 回答 3

1

规范您的数据结构:例如,有一个包含列的product_info表(将 FK 放入表中)并表达有关每个产品的附加信息。productskeyvalue

于 2012-10-14T13:55:33.133 回答
0

Martin Fowler 列出了三种通用方法。

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

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

于 2012-10-14T15:45:48.473 回答
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 实施的有趣观点。不管你喜不喜欢是另一回事:)

于 2012-10-14T15:46:05.040 回答