如何将面向对象编程的对象存储在像MySQL这样的数据库中

3

最近我一直在使用Java工作,对面向对象编程已经很熟练了。最近我开始涉及基于Web的编程,包括jQuery、JavaScript、PHP和最新的MySQL。通过面向对象编程,管理对象并读写相关信息非常容易。现在我正在学习MySQL,但是将一个简单的面向对象程序转换为在线“程序”,并将其数据存储在数据库中却很困难。我一直在Access中试验,只是为了能够清晰地看到整个数据库,并且似乎找不到一个好的存储数据的方法。为了学习这个,这里有一个简单的面向对象类结构(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
  ////////////////////////////////////////////

}

对于一个数据库,我需要像这样的吗?

关系图

也许我的想法完全不对。我不确定。如果有人能告诉我我在哪里,那就太好了。非常感谢所有的帮助。


在我看来,你可以使用一些面向对象的数据库来完成这个任务。 - sybear
2
@Jari:这是关系型数据库管理系统的经典任务。 - zerkms
如果您使用一些PHP框架,例如Yii或Zend,您的表将是“Model”(每个都是一个类)。http://www.yiiframework.com/doc/guide/1.1/en/basics.mvc - Eduardo M
如果您了解Java面向对象编程,并且以前使用过任何类型的数据库,则无需询问这些问题。对于所有项目,数据库始终是相同的。如果您是PHP面向对象编程的新手,则应该学习一些框架,例如Zend和一些ORM,例如Doctrine。 - pregmatch
1
你是在说你不理解标准数据库数据类型吗?比如在设置架构方面遇到了问题?还是你的意思是你不知道如何连接、存储和检索来自一个被认为已经正确建立的数据库的数据? - Kai Qing
我了解数据库数据类型,只是架构方面不太清楚。其他方面我都能做到。我只是不知道为存储“对象”而设置数据库的逻辑方式。对于我提供的比赛、团队和球员类的示例,我应该如何在数据库中存储几个不同的比赛,每个比赛都有球员、团队等等。如果我能得到这些的示例,我认为我可以根据示例弄明白它 :) - mandelbug
2个回答

3

2
如果我理解正确,你基本上是在寻求有关数据模型的建议吗?这很简单,怎么样:

data model

没什么花里胡哨的:
  • 一个球员有一个球队,一个球队有一个到多个球员
  • 一个球队有零到多个比赛
  • 一个比赛有一个(实际上是两个)到多个球队
注意球队和比赛之间的多对多关系。我会让您在表格中添加相关信息。例如,您可以在“Tournaments_has_teams”中添加一个日期字段,以跟踪球队的比赛。为了进一步说明这个例子,您还可以有另一个表格和一个比赛/集合在比赛中的一对多关系。
一旦您的数据库设置好了,您可以创建自己的数据访问层(DAL),或使用ORM从您的应用程序中查询它。请注意,由于存在阻抗不匹配,您不能直接进行面向对象/关系型数据库的映射(您可以通过使用其他技术来克服这个问题,比如在评论中提到的面向对象数据库)。

这非常有帮助。谢谢!我想我只能尝试找一个面向对象的数据库来使用(可能是上面提到的其中之一)。我很高兴你证实了我的怀疑,即没有办法直接从对象到数据库进行优雅的转换。我可能会按照你在这里所说的方法去尝试,但我想没必要让它变得更复杂。再次感谢! - mandelbug
@JoshI 注意,面向对象数据库管理系统从未取得突破的原因是有其道理的。https://dev59.com/cHVC5IYBdhLWcg3w1E1q 同时,请确保验证最有帮助的答案。 - LMeyer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接