1

ProfileBotの 2 つの ActiveRecord テーブルを作成できました。それらを適切にリンクする方法を理解できませんでした。

username、genderという列を持つ何千ものプロファイルがあります。ボット名、レベルの列を持つ一握りのボット

ボットがプロファイルにアクセスすると、2 つの情報を記録する必要があります。訪問し、その特定のボットの応答を更新する必要があります。Visitedは、特定の 1 つのボットがその 1 つの特定のプロファイルにアクセスしたことを示すブール値です。応答は文字列です。訪問者と同様に、これは 1 つの特定のプロファイルによって送信された 1 つの特定のボットに対する応答です。これら2つのテーブルを結合する3番目のテーブルが必要だと考えています。

すべてのボットがアクセスするすべてのプロファイルと、アクセス時に発生する応答の記録を保持する必要があります。

この関係を作成するにはどうすればよいですか? また、列を設定/更新するにはどうすればよいですか?

ありがとう

4

1 に答える 1

0

私はあなたの要件を完全に確信しているわけではないので、もう一度言います:

  1. テーブル プロファイル: id、ユーザー名、性別 (テーブル名を単数形に変更したことに注意してください)
  2. テーブル ボット: ID、ボット名、レベル
  3. 「ボット」はどういうわけかプロファイルを「訪問」します。ボットがいつプロファイルにアクセスしたかを追跡する必要があります。
  4. ボットがプロファイルにアクセスすると、「応答」文字列が生成され、その応答文字列を保持する必要があります。訪問の記録とともに保存する必要があると思います。

結合テーブルに関するあなたの本能は良いと思います。ただし、ブール値の「訪問済み」列は機能しないと思います。訪問の記録がある場合、それはプロファイルが訪問されたことを示しているからです。レコードが存在しない場合は、アクセスされていません。

これを考えると、テーブルは次のようになると思います。

profile 
---------
profile_id integer autoincrement
username varchar(255)
gender ...

bot
---------
bot_id integer autoincrement
name varchar(255)
level ...

visit
---------
visit_id integer autoincrement
bot_id integer
profile_id integer
visit_time datetime
response varchar(255)

データの整合性を維持するには、この訪問テーブルとプロファイルおよびボット テーブルの間に外部キー制約を設定する必要があります。

alter table visit
    add constraint visit_profile_profile_id_fk 
    foreign key (profile_id) 
    references profile (profile_id);

alter table visit
    add constraint visit_bot_bot_id_fk 
    foreign key (bot_id) 
    references profile (bot_id);

特定のボットが特定のプロファイルに複数回アクセスすることが「合法」かどうかを判断する必要があります。そうでない場合は、訪問テーブルの profile_id と bot_id の組み合わせに一意の制約を設定し、DBMS がエラーをスローしたときに重複キー エラーをキャッチする必要があります (または重複を処理します)。

それが役立つことを願っています。

于 2012-10-27T03:42:36.357 に答える