0

状況は次のとおりです。ユーザーテーブルには、国、年齢層、性別など、他のユーザーのデータと重複するデータが含まれています。

MySQLでは、3つのテーブルまたは2つのテーブルを使用します。国を保存する場合は、3つのテーブルを使用します。1つはユーザーテーブル、もう1つは国テーブル、最後のテーブルは2つを結合します。(もちろん、1人のユーザーが1つの国を持っている場合は、2つのテーブルを使用できます。)

例)user(id、otherUserInfo)、userCountry(id_user、id_country)、country(id、countryName)

Grailsを初めて使用するので、このスキーマを表現するための最良の方法は何かと考えていました。2-3ドメインクラスを作成する必要がありますか?または、単一のドメインクラスでこれを行うための魔法の機能(他の多くのGrails機能(:)など)がありますか。

4

1 に答える 1

2

おそらく2つでそれを行うことができます。

class User {
    //other user info

    //if user only has one country
    Country country

    //if user has many countries
    static hasMany = [countries: Country]
}

class Country {
    //country info
}

Countryに所属することはおそらく望ましくないので、クラスに、とのつながりを示すUserものは何も必要ありません。Grails / Gormは、これらのいずれの場合でも、リンクエンティティの作成を処理します。CountryUser

ユーザーが多くの国を持っていて、関係に関する他の情報を保存する必要がある場合は、独自の結合テーブルを作成する必要があります。たとえば、ユーザーがその国に行った訪問数を維持する必要がある場合は、次のようになります。

class User {
     //other user info

    static hasMany = [userCountries: UserCountry]
}

class UserCountry {
    static belongsTo = [user: User]
    Country country
    int numberOfVisits
}

class Country {
    //country info
}
于 2012-12-18T23:14:54.040 に答える