2016-01-17 2 views
0

Мне было интересно, возможно ли это, создав таблицу, связанную с уже существующей таблицей.Как создать таблицу, связанную с другой таблицей

Итак, у меня есть таблица пользователей, которая уже в 30 столбцах. Чтобы он не был слишком большим, я хочу создать новую таблицу с именем user_data. Это будет содержать информацию, такую ​​как возраст пользователей, день рождения и другая информация.

Мой вопрос: можете ли вы создать таблицу, связанную с другой таблицей (через идентификатор таблицы). И все строки автоматически создаются из-за существующего идентификатора.

Я использую рубиновые рельсы и postgresql. На таких платформах можно сделать что-то подобное. Я новичок в базах данных, поэтому не знаю, существует ли что-то подобное.

+0

Я только что видел, что я не читал вас правильно, что вы имеете в виду: «И все строки могут быть созданы автоматически из-за существующего идентификатора». Затем я исправлю свой ответ – theDrifter

ответ

1

Простейшим способом было бы установить связь has_onebelongs_to. Итак, один пользователь has_one запись user_data и user_data запись belongs_to пользователь. Таким образом, вы должны вставить primary_key записи пользователя в качестве foreign_key внутри записи user_data. Вот хороший материал ЧТЕНИЕ

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 
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(); 

Не пробовал, но он, или что-то в этом роде, должен работать.

Смежные вопросы