私は3つのモデルを持っているPerson
、Role
とPosition
のようなサッカークラブの人々を表します
public class Person {
private Long id;
private String name;
private Role role;
}
public class Role {
private Long id;
private String name; //like manager, goalkeeping_coach, player
}
public class Position {
private Long id;
private String name; //striker, midfielder, defender, goalkeeper
}
問題は、ということであるposition
彼らの役割がある場合にのみ、人のために理にかなっていますplayer
。私がやるのであれば
public class Person {
private Long id;
private String name;
private Role role;
private Position position;
}
その後、すべてのためperson
の役割を持っていないインスタンスplayer
、position
フィールドはNULL値を格納します。同様に、唯一のために意味をなす他の属性が存在してもよいmanager
、および/またはgoalkeeping_coach
インスタンス。
私が作ってみましたPerson
クラス抽象を
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class Person {
private Long id;
private String name;
private Role role;
}
public class Player extends Person {
private Position position;
}
public class Manager extends Person {
}
これが原因となりますplayer
し、manager
インスタンスが別々のテーブルに保存します。しかし、もし問題が、今起こるrole
のperson
変更は(プレイヤーがクラブの監督を退任してなり言います)。それから私は、(削除言う別のテーブルから行を移動する必要があると思いplayer
インスタンスを、新たな作成manager
を除く、同じデータを使用してインスタンスposition
行くには良い方法ではないようですこれは、データを)。
それでは、このシナリオを処理するための最善のアプローチでしょうか?それは、最初のケースのようにヌル値を持ってしても大丈夫ですか?
要件は、の間の接続点であるPerson
とRole
変更することができます。
モデルが反映することができ、あなたがこの接続のテーブルだけでなく、間の接続を行う場合Person
と、Position
// Person table has only Person details
public class Person {
private Long id;
private String name;
}
// Role table has only Role details
public class Role {
private Long id;
private String name; //like manager, goalkeeping_coach, player
}
// Position table has only ...
public class Position {
private Long id;
private String name; //striker, midfielder, defender, goalkeeper
}
// connection of Person and Role
public class PersonRole {
private Long person_id;
private Long role_id;
}
// connection of Person and Position
public class PersonPosition {
private Long person_id;
private Long position_id;
}
この設計は、人の要件が役割を変更しても、位置の条件付き妥当性の解決します。それはまた、複数の役割と位置を有する者のような将来の要件のために食料調達します
編集:私は、私が説明すると、実際にデータベースモデルであることを考え出し。Javaで、あなたは、多対多の関係などの接続テーブルをモデル化することができます(あなたには、いくつかのORMを使用している場合)