2017-02-15 15 views
0

他の多くのクラスを含むクラスの状態を保存するために、MySQLのテーブルをどのように設計するのですか?多くのクラスを含むクラスのテーブルを設計する方法。 (MySQL)

私のプロジェクトrequirmentの具体的な例です。

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

このクラスはAndroidプロジェクトのものです。私はバックエンドにJAX-RSを使用しています。このクラスをバックエンドに保存する必要があります。

Stringとlongは簡単ですが、このクラスの2つのオブジェクトにどのようにアプローチするのか分かりません。

+0

おそらく使用したいJPAを調べてください。また、SQLで外部キーと結合がどのように機能するかを知る必要があります。 – chrylis

答えて

1

3つのテーブル(profile、equipment、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 
    } 
1

共通のパターンはprofileというテーブルと、他のオブジェクトのテーブルequipmenttennis_racketです。

あなたが equipmentテーブルの行を参照する外部キー、および tennis_racketテーブルの行を参照する外部キーである tennis_racket_idと呼ばれる同様に別のフィールドである equipment_idと呼ばれるフィールドを持っているあなたの profileテーブルで

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接続を使用して、手動でオブジェクトを移入することができます。 = 1は次のようになりますIDを持つユーザーのためのテニスラケットを取得するためのクエリ:

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

たちはtennis_racket_idtennis_racketテーブルにprofileテーブルを結合する方法を参照してください。

JPAまたはHibernateのようなORM(オブジェクトリレーショナルマッピング)ツールを使用して、重い荷物を管理することができます。基本レベルでは、SQLに似たクエリ言語を使用して、クエリの結果をJavaオブジェクトにコピーします。これはいくつかの点でより複雑なソリューションです。いくつかの新しいツールを習得する必要がありますが、長期的にはずっと簡単です。

+0

あなたが作成した各テーブルにuser_idが含まれている方が良いでしょう。 –

+0

それは可能性があります。問題文をできるだけ正確に反映させて、理解しやすいようにしました。 – Matt

0

一人一人だけ機器や tennisRacketを持っているように見えます。だから私はマットの答えが良いと思う。

それぞれの人が、多くの機器やtennisRacketを持つことができる場合は、主キー(user_idは、equipment_id、tennis_racket_id)である1つの以上のテーブルを持っている必要があります。

関連する問題