モデルでの条件付きフィールドを処理するための最良の方法

Kshitij Bajracharya:

私は3つのモデルを持っているPersonRolePositionのようなサッカークラブの人々を表します

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の役割を持っていないインスタンスplayerpositionフィールドは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インスタンスが別々のテーブルに保存します。しかし、もし問題が、今起こるroleperson変更は(プレイヤーがクラブの監督を退任してなり言います)。それから私は、(削除言う別のテーブルから行を移動する必要があると思いplayerインスタンスを、新たな作成managerを除く、同じデータを使用してインスタンスposition行くには良い方法ではないようですこれは、データを)。

それでは、このシナリオを処理するための最善のアプローチでしょうか?それは、最初のケースのようにヌル値を持ってしても大丈夫ですか?

シャロンベンアッシャー:

要件は、の間の接続点であるPersonRole変更することができます。
モデルが反映することができ、あなたがこの接続のテーブルだけでなく、間の接続を行う場合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を使用している場合)

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=209554&siteId=1