php - 关系数据库中的面向对象结构

标签 php mysql database oop

各位,

连续第 n 次,我再次遇到同样的老问题。它是关于“我如何以一种轻松的方式将 OOP 结构映射到数据库表。”

这是一个场景:我的系统中有几种类型的“参与者”—— worker 、雇主、联系人。它们具有某些共同的功能;其他作品则大不相同。所有参与者处理的实体是“通信”、“注释”(管理员喜欢在客户身上留下注释)等等。每个 actor 类型处理大量其他实体类型,而其他类型则不处理。

目前,我的数据库架构包括以下表:

Actor :

  • worker
  • 雇主
  • 联系

实体:

  • 沟通
  • 笔记
  • 等等

实体和参与者之间的关联表:

  • worker 通讯协会
  • 雇主沟通协会
  • worker 笔记协会
  • 等等,你得到了训练。

这对我来说就像是一种“代码味道”。每当客户改变他们的角色(即从“联系人”提升为“雇主”)时,需要运行一堆疯狂的脚本。糟糕......另一方面,如果我在一个纯粹的 OOP 驱动的世界中操作,这会容易得多 - 为所有具有共同属性的实体创建一个基类,并完成它......

在数据库世界中,该选项在理论上似乎是可行的,但听起来非常困惑......即如果我没有理解错的话,我就会有一个新的 base_actor 表,并且每个其他 actor 都会有一个 base_actor_id,然后关联将在 base_actor 和实体之间......但是,我该如何进行反向关联查询? IE。 “显示与 worker 类型的转换的所有通信”?

有什么建议吗?关于“将 OOP 结构映射到关系数据库”的主题有什么一般性想法吗?

最佳答案

.. It's about "how do I map OOP structures to database tables in a painless way."

你没有。

面向对象和关系代数是两种根本不同的范式。如果没有主观解释,您就无法在它们之间转换。这称为阻抗失配,并被称为 The Vietnam of Computer Science .

关于php - 关系数据库中的面向对象结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/600684/

相关文章:

javascript - Php 不能与 ajax 一起工作

java - 如何通过java代码复制MySQL中新建数据库的数据库结构?

node.js - 如何实现 mongodb find 查询的后备?

mysql - 想要在子查询中使用 Between 子句

mysql - 基于条件的选择和连接查询

php - Mysql自动更新事件

php - 在 PHP 中,大型 switch 语句或每次都支付数组初始化的数组键查找速度更快?

php - 如何将 URL 变量传递给 Silverstripe 中的表单

PHP-MySQL : Get rows from table where date between two dates

mysql - 使用 SSH 在 CentOS 上恢复 MYSQL 数据库时遇到问题