如何为包含许多类的类设计表。 (MySQL的)

时间:2017-02-15 03:27:49

标签: java mysql

我如何在MySQL中设计表来保存包含许多其他类的类的状态?

这是我项目要求的一个具体例子。

 public class Profile{
      private long userId;
      private String firstName;
      private String lastName;
      private Equipment equipment;
      private TennisRacket tennisRacket;
  }

该课程来自Android项目。我正在使用JAX-RS作为后端。我需要在后端保存这个类。

String和long很容易,但我不知道如何处理这个类中的两个对象。

3 个答案:

答案 0 :(得分:1)

这样做的常见模式是有一个名为profile的表格,以及其他对象equipmenttennis_racket的表格。

profile表中,您有一个名为equipment_id的字段,它是引用equipment表中一行的外键,同样是另一个名为tennis_racket_id的字段是引用tennis_racket表中的行的外键。

profile
|user_id|first_name|last_name|equipment_id|tennis_racket_id|
|1      |Bob       |Brown    |7           |5               |

equipment
|equipment_id|description|
|7           |ball       |

tennis_racket
|tennis_racket_id|size |
|5               |large|

您可以自己管理所有这些并使用JDBC连接查询数据库,然后手动填充对象。为id = 1的用户检索网球拍的查询可能如下所示:

SELECT t.*
FROM profile p
JOIN tennis_racket t ON p.tennis_racket_id = t.id
WHERE p.user_id = 1

了解我们如何将profile表加入tennis_racket上的tennis_racket_id表。

您可以使用ORM(对象关系映射)工具,例如JPAHibernate来管理繁重的工作。在基本级别,它为您提供了一种类似SQL的查询语言,并处理将查询结果复制到Java对象中。这在某些方面是一个更复杂的解决方案,你必须学习一些新工具,但从长远来看它可以更容易。

答案 1 :(得分:1)

您可以创建三个表(个人资料,设备,tennis_racket)并与他们建立关系。

create table profile(
   userId INT NOT NULL auto_increment,
   first_name VARCHAR(20) default NULL,
   last_name  VARCHAR(20) default NULL,
   equipment_id     INT  default NULL,
   tennis_racket_id     INT  default NULL,
   PRIMARY KEY (userId)
);

create table equipment(
   id INT NOT NULL auto_increment,
--other columns your class has 
   PRIMARY KEY (id)
);

create table tennis_racket(
   id INT NOT NULL auto_increment,
--other columns your class has 
   PRIMARY KEY (id)
);

if you use JPA you can use following entity classes 

 @Entity
 @Table(name = "profile")
 public class Profile{
      private long userId;
      private String firstName;
      private String lastName;
      @ManyToOne
      @JoinColumn(name="equipment_id", nullable=false)
      private Equipment equipment;
      @ManyToOne
      @JoinColumn(name="tennis_racket_id", nullable=false)
      private TennisRacket tennisRacket;
  }

 @Entity
 @Table(name = "equipment")
 public class Equipment {
      private long Id;
        //add other attributes
  }

 @Entity
 @Table(name = "tennis_racket")
 public class TennisRacket{
      private long Id;
    //add other attributes
  }

答案 2 :(得分:0)

看起来每个人只有一个设备和一个 tennisRacket。所以我觉得亚特的回答很好。

如果每个人都可以拥有许多设备或者网球服,你应该再增加一个主键 (user_id,equipment_id,tennis_racket_id)的表格。