如何创建链接到另一个表的表

时间:2016-01-17 18:23:26

标签: ruby-on-rails database postgresql

我想知道这是否可行,创建一个链接到另一个现有表的表。

所以我有一个用户表,已经有30列。为了防止它太大,我想创建一个名为user_data的新表。这将包含用户年龄,生日和其他信息等信息。

我的问题是你可以创建一个链接到另一个表的表(通过表id)。并且可以根据现有ID自动创建所有行。

我正在使用ruby rails和postgresql。在这些平台上可以做到这样的事情。我是数据库的新手,所以我不知道是否存在类似的东西。

2 个答案:

答案 0 :(得分:1)

最简单的方法是设置has_one belongs_to关联。 因此,一个用户has_one user_data记录和user_data记录belongs_to用户。 因此,您必须在user_data记录中插入用户记录的primary_key作为foreign_key。这是一些很好的阅读材料

http://edgeguides.rubyonrails.org/active_record_migrations.html#foreign-keys

迁移应该像这样将用户密钥添加到user_data表中:

class AddForeignKey < ActiveRecord::Base
 def self.up
   add_foreign_key :user_data_sets, :users
 end
 def self.down
   remove_foreign_key :user_data_sets, :users
 end
end

答案 1 :(得分:0)

简单的表格。

CREATE TABLE employee(
   employee_id int4 serial primary key,
   first_name varchar(40) NOT NULL,
   last_name varchar(40) NOT NULL,
   updated timestamp(6) NOT NULL DEFAULT now()
);

一对一的额外信息表。这些通常包含相关但不重要的信息。可以有几个这样的。 一对一关系由唯一和外键引用创建。

CREATE TABLE employee_extra (
   employee_extra_id int4 serial primary key,
   employee_id int4 NOT NULL UNIQUE REFERENCES employee(employee_id),
   birthday timestamp(6) NULL,
   updated timestamp(6) NOT NULL DEFAULT now()
);

创建一个触发器,在创建原始文件时填充额外的表。

CREATE OR REPLACE FUNCTION employee_after_insert_trigger() RETURNS TRIGGER AS $emp_trigger$
    BEGIN
        --
        -- Create a row in employee_extra matching the just created row in employee
        --
        INSERT INTO employee_extra (employee_id, updated) SELECT employee_id, updated FROM NEW;
        RETURN NEW;
    END;

$emp_trigger$ LANGUAGE plpgsql;

CREATE TRIGGER employee_after_insert
  AFTER UPDATE
  ON employee
  FOR EACH ROW
  EXECUTE PROCEDURE employee_after_insert_trigger();

Haven没有尝试过,但它或其类似的东西应该有效。