1

アプリを過剰にモデル化しているかどうかについて、いくつか意見を述べてください。このアプリでは、ウェブサイトからダウンロードしたhtmlメタデータを保存しています。メタタグをダウンロードして、配列の一部にします。meta_tags配列の要素ごとに、その要素を保存します。ただし、たとえば、2つのロボットメタメタ(1つはインデックス用、もう1つはフォロー用)がある状況を考慮する必要があります。したがって、私の最初の考えは、「meta_tags」テーブルを作成し、メタタグをそれらに保存することによってこれを解決することでした。そのwoudはサイトテーブルを無駄のない状態に保ちます。サイトテーブルに多くのmeta_tagsがあることを指定するだけです。

しかし、その後、meta_tagsに多数の重複エントリが含まれることに気付きました。たとえば、2つのロボットメタタグを持つ2つのWebサイトがある場合(ここでも、1つはインデックス用、もう1つはフォロー用)、2つの一意のレコードしかない場合、そのテーブルには4つの行があります。そのため、サイトモデルにhtmlのダウンロードを実行させてから、すべての一意のメタタグを一覧表示する「メタタグ」と呼ばれる別のモデルを作成する必要があると考えています。次に、どのサイトにどのメタタグがあるかを識別する「site_meta_tags」という結合テーブルを介して、sitesテーブルをmeta_tagsテーブルに関連付けます。これを設定する最良の方法ですか?それとも私はこれを複雑にしすぎていますか?

更新:ここにフォローアップの質問を投稿しました:Railsアプリはモデル間の保存に問題があります

4

1 に答える 1

1

モデルと関連付けの「適切な」数は、ユースケースと制約によって異なります。データベーススペースが貴重な場合は、データベースの正規化の方が理にかなっている可能性があります。より高速なルックアップが必要な場合は、非正規化の方が理にかなっている可能性があります。特定の種類のルックアップを最適化する必要がある場合は、そのためのモデルと関係を調整します。とはいえ、プロトタイプを作成しているだけの場合は、今はあまり心配しないでください。意味のあるものから始めて、何が起こるかを確認してください。

あなたが説明した方法(多対多の関係)は、両方向で検索できるようにしたい場合は、私には問題ないように思えます。

  1. 最初にメタタグを検索してから、関連するサイトを見つけます
  2. 最初にサイトを検索してから、関連するメタタグを見つけます

(注:インデックスを追加することを忘れないでください。)

ちなみに、Railsでは、多対多の結合テーブルの場合、Railsの規則では、2つのテーブル名をアルファベット順に並べてから貼り付けます。したがって、デフォルトでは「sites_meta_tags」ではなく「meta_tags_sites」になります。A Guide to ActiveRecordAssociationsの「has_and_belongs_to_many」セクションを参照してください。

于 2012-06-22T13:31:41.350 に答える