Activerecord链接2个表

时间:2012-10-26 23:25:43

标签: activerecord

我已经能够制作2个ActiveRecord表,个人资料 Bot 。我一直无法弄清楚如何正确地链接它们。

有数千个个人资料,列用户名,性别。列 botname,level

的少数 Bots

当机器人访问个人资料时,需要记录两条信息。应针对该特定机器人更新已访问响应访问是一个布尔值,表示某个特定机器人已访问过该特定配置文件。 响应是一个字符串,再次类似于已访问,这是对由一个特定配置文件发送的特定机器人的响应。我想我需要一个连接这两个表的第三个表。

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

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

由于

1 个答案:

答案 0 :(得分:0)

我不完全确定你的要求,所以我会重申一下:

  1. 表格配置文件:ID,用户名,性别(请注意,我将表格名称更改为单数)
  2. 表Bot:id,botname,level
  3. “机器人”以某种方式“访问”个人资料。您需要跟踪机器人何时访问了个人资料。
  4. 当机器人访问配置文件时,会生成“响应”字符串,并且需要保留该响应字符串。我假设它需要保存并带有访问记录。
  5. 我认为你对连接表的直觉很好。但是,我认为布尔“访问”列不起作用,因为如果您有访问记录,则表明该配置文件已被访问。如果记录不存在,则不会访问该记录。

    鉴于此,我认为您的表格如下:

    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)
    

    为了保持数据的完整性,您需要在此访问表与配置文件和bot表之间设置外键约束。

    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将它们抛给您时(或以其他方式处理欺骗)捕获重复键错误。)

    我希望有所帮助。