1

私は、ユーザーが他のユーザーとの 2 種類の関係のいずれかを持つことができるアプリに取り組んfavoritingfollowingis favorited byますis being follow by。電話する。

ユーザー モデルを作成する際に考慮すべきことは何ですか? 具体的には、以下を指定する 1 つのモデル、リレーションシップを用意する必要があります。

Relationships
user_1 | relationship_type | user_2

Relationship_type はfavoriting、またはfollowing?

または、2 つの別々のモデルを使用する必要があります。

Favorites
user_1 | user_2

Follows
user_1 | user_2

私はデータベースについてあまり詳しくないので、これら 2 つの潜在的なセットアップを選択する際の考慮事項について尋ねてもよろしいですか? 2 は 3 より正規化されていますか、それともそれ以下ですか? それは問題ですか?どのような状況で?

アップデート

「reviews」/「reviewed_by」のような 3 番目の関係があるとしましょう。質問は、2 つの異なる双方向の関係タイプではなく、約 3 です。関係タイプの数を増やすことはこれに影響しますか?

Favorites
user_1 | user_2

Follows
user_1 | user_2

Reviews
user_1 | user_2
4

1 に答える 1

2

1 つのテーブルで 2 つの異なるモデルを使用します。つまり、Single Table Inheritance パターンを使用します。このようにして、オプション#1に近いdbテーブルを取得し、オブジェクトモデル側のお気に入りとフォローの2つの異なるクラスを持つクリーンなモデルを作成して、コードと命名をより明確にします。

ネーミングに関しては、Michael Hartl が彼の例で "followers" と "followed_users" を使用しています

于 2012-07-20T06:58:54.457 に答える