gpt4 book ai didi

database - 具有特殊要求的对象关系映射(选择基础+所有子对象,...)

转载 作者:太空狗 更新时间:2023-10-30 01:57:53 25 4
gpt4 key购买 nike

我有以下 PHP 类结构:

enter image description here

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

我的要求是:

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

我找到了一些可能性,但没有一个符合我所有的要求:

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

信息:

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

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

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

感谢您提供的所有帮助(链接、关键字...),如果有什么不清楚的地方,尽管问。

最佳答案

您可能没有仔细研究类表继承。特别是,您应该查看子类表如何填充其 ID 字段。它不是自动编号。它是相应父类(super class)中 ID 字段的副本。这就是“穷人的遗产”。对新项目的插入进行编程有点复杂,但您需要的连接是灵活、简单和快速的。您只需在连接条件中使用子类的 ID 和父类(super class)的 ID 即可。

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

关于database - 具有特殊要求的对象关系映射(选择基础+所有子对象,...),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11711834/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com