如何将 OOP 中的对象存储在 MySQL 等数据库中

Posted

技术标签:

【中文标题】如何将 OOP 中的对象存储在 MySQL 等数据库中【英文标题】:How to store objects from OOP on a database like MySQL 【发布时间】:2013-06-30 12:38:23 【问题描述】:

我最近一直在使用 Java,但我的 OOP 已关闭。最近,我一直在使用 jQuery、javascriptphp 和最近的 mysql 进行基于 Web 的编程。使用 OOP 可以很容易地管理对象和读/写有关它们的信息。现在我正在学习 MySQL,我发现很难将简单的 OOP 程序转换为将其数据存储在数据库中的在线“程序”。我一直在玩Access,只是为了让我可以看到整个数据库,但似乎无法找到存储数据的好方法。出于学习的目的...这是一个简单的 OOP 类结构 (Java),我想将其转换为数据库(可以这么说)。

public class Tournament 

  ////////////////////////////////////////////
  //Variable Declaration
  ////////////////////////////////////////////
  Team[] theTeams;  //Array of Team Objects
  int numTeams;     //Number of Teams

  ////////////////////////////////////////////
  //Functions and stuff
  ////////////////////////////////////////////





public class Team 

  ////////////////////////////////////////////
  //Variable Declaration
  ////////////////////////////////////////////
  Player p1;        //Player 1
  Player p2;        //Player 2
  int teamNum;

  ////////////////////////////////////////////
  //Functions and stuff
  ////////////////////////////////////////////





public class Player 

  ////////////////////////////////////////////
  //Variable Declaration
  ////////////////////////////////////////////
  String fName;     //First Name
  String lName;     //Last Name

  ////////////////////////////////////////////
  //Functions and Stuff
  ////////////////////////////////////////////


对于数据库,我想要这样的东西吗?

也许我完全不同意整个想法。我不知道。如果有人可以让我知道我在哪里,那就太好了。感谢所有帮助。

【问题讨论】:

IMO,你可以使用一些面向对象的数据库。 @Jari:这是 RDBMS 的经典任务 如果您使用一些 PHP 框架,例如 Yii 或 Zend,您的表将是 Model(每个都是一个类)。 yiiframework.com/doc/guide/1.1/en/basics.mvc 如果您了解 java oop 并且以前使用过任何类型的数据库,则无需问此问题。 db 对于所有项目总是相同的。如果你是 php oop 新手,你应该学习一些框架 zend + 一些类似 orm 的学说。 您是说您不了解标准数据库数据类型吗?喜欢在设置架构时遇到问题?或者您的意思是您不知道如何从您认为正确建立的数据库中连接、存储和检索数据? 【参考方案1】:

您可以使用ORM 库,例如Doctrine。

【讨论】:

【参考方案2】:

如果我理解正确,您基本上是在就您的数据模型寻求建议?这很简单,这个呢:

这里没什么特别的:

一名球员拥有一支球队,一支球队拥有一对多球员 一支球队有零到多场比赛 一场锦标赛有一个(实际上是两个)对许多球队

注意球队和锦标赛之间的多对多关系。我会让您在表格中添加相关信息。例如,您可以在Tournaments_has_teams 中添加日期字段来跟踪团队的比赛。为了进一步推动示例,您还可以在锦标赛中拥有另一张桌子和一对多的比赛/比赛。

设置好数据库后,您可以创建自己的 DAL 或使用 ORM 从您的应用程序中查询它。请注意,由于impedance mismatch,您不能有直接的 OOP/RDBMS 映射(您可以通过使用其他技术来克服这个问题,例如面向对象的数据库,如 cmets 中提到的)

【讨论】:

这帮助很大。谢谢!我想我只需要尝试找到一个可以使用的 OO 数据库(可能是上面提到的一个)。很高兴您证实了我的怀疑,即没有办法直接从对象很好地转到数据库。我可能会按照你在这里的方式尝试它,但我想让它变得比它必须的更复杂是没有意义的。再次感谢! @JoshI 请注意,OODBMS 从未取得突破是有原因的***.com/questions/170649/… 还要确保您验证了最有帮助的答案。

以上是关于如何将 OOP 中的对象存储在 MySQL 等数据库中的主要内容,如果未能解决你的问题,请参考以下文章

抽象数据类型(ADT)和面向对象编程(OOP)3.5 ADT和OOP中的等价性

面向对象OOP

OOP导论系列---抽象过程

面向对象编程(OOP)思想小结

go语言学习面向对象oop

JVM中的压缩OOP