1

我已经能够制作 2 个 ActiveRecord 表ProfileBot。我一直无法弄清楚如何正确链接它们。

有数以千计的配置文件,其中包含username、gender列。少数具有列botname、level的Bot

当机器人访问个人资料时,需要记录两条信息。应针对该特定机器人更新已访问响应。visited是一个布尔值,表示一个特定的机器人已经访问了一个特定的配置文件。响应是一个字符串,就像访问过的一样,这是对一个特定配置文件发送的一个特定机器人的响应。我在想我需要一个连接这两张桌子的第三张桌子。

我需要记录每个机器人访问的每个配置文件以及它访问时发生的响应。

如何创建这种关系以及如何设置/更新列?

谢谢

4

1 回答 1

0

我不完全确定您的要求,所以我将重申它们:

  1. Table Profile:id、username、gender(注意我把表名改成了单数)
  2. 表 Bot:id、botname、级别
  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 回答