4

我有以下 PHP 类结构:

在此处输入图像描述

我想将对象保存在数据库中(MySQL、MSSQL、postgreSQL 和所有标准提供商提供)。

我的要求是:

  1. 所有电子设备/所有计算机/笔记本电脑的列表...包括子类的对象,所有属性都属于具有过滤器和顺序可能性的对象(所有属性的过滤器)
  2. 通过 ID 选择一条记录
  3. 在 DB 结构中插入新对象(读比写重要得多)
  4. 没有太多的连接和尽可能少的数据库请求

我发现了一些可能性,但没有一种可能性符合我的所有要求:

  1. 类表继承:获取包括子类在内的所有项目非常复杂,而且我找不到用于生成正确连接的自动方法(因此我不必为每个子类定义单独的连接语句)。另一个问题:如果您想通过 ID 查找对象,您不知道必须使用哪个连接路径。
  2. 单表继承:太多不同的属性 --> NULL 字段
  3. 具体表继承:要搜索所有项目,您必须执行许多数据库请求,因为 UNION 需要相同数量的列
  4. EAV:如果需要过滤器 1 连接/属性 --> 性能会很差(是否有可能只连接过滤器属性而其余的作为行?)
  5. NoSQL 数据库:没有提供者(服务器太贵,我不想关心管理)
  6. postgreSQL 内置继承:没有按照我需要的方式工作(从基础你可以列出所有的electric_devices,但只是常见的属性)

信息:

  • 存储对象的总数约为 100
  • 属性的完整数量(~100)很少改变
  • 许多属性具有预定义的多项选择值
  • 每个对象有 20 到 50 个可能的属性

最后对我来说没有办法,但我认为一定有可能,其他门户网站也是这样做的(例如eBay或任何小型广告门户网站),可能我想了很多,我没有看到最简单的方法。

有没有一种方法可以满足所有要求?

感谢您的每一个帮助(链接,关键字,...),如果有不清楚的地方,请问。

4

2 回答 2

1

您可能没有足够仔细地研究类表继承。特别是,您应该查看子类表如何填写其 ID 字段。它不是自动编号。它是相应超类中 ID 字段的副本。这是“穷人的遗产”。对新项目的插入进行编程有点复杂,但是您需要的连接是流畅、简单和快速的。您所要做的就是在连接条件中使用子类的 ID 和超类的 ID,您就完成了。

您可以创建 5 个视图来为您的案例加入通用属性和专用属性。

于 2012-07-30T10:19:04.927 回答
0

当您为您的研究列出 no-sql 时:我认为这对您来说是一个非常简单的解决方案,比如 mongodb。在这种情况下,您的要求得到了满足,并且手头有很好的对象映射解决方案,例如 Doctrine ODM。此外,它绝对可以托管,例如http://dotcloud.com 。虽然我不知道你的预算是多少。使用此提供商,您将从 appr 开始。8美元一个月。

于 2012-08-07T15:09:54.553 回答