私はあなたの要件を完全に確信しているわけではないので、もう一度言います:
- テーブル プロファイル: id、ユーザー名、性別 (テーブル名を単数形に変更したことに注意してください)
- テーブル ボット: ID、ボット名、レベル
- 「ボット」はどういうわけかプロファイルを「訪問」します。ボットがいつプロファイルにアクセスしたかを追跡する必要があります。
- ボットがプロファイルにアクセスすると、「応答」文字列が生成され、その応答文字列を保持する必要があります。訪問の記録とともに保存する必要があると思います。
結合テーブルに関するあなたの本能は良いと思います。ただし、ブール値の「訪問済み」列は機能しないと思います。訪問の記録がある場合、それはプロファイルが訪問されたことを示しているからです。レコードが存在しない場合は、アクセスされていません。
これを考えると、テーブルは次のようになると思います。
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 がエラーをスローしたときに重複キー エラーをキャッチする必要があります (または重複を処理します)。
それが役立つことを願っています。