我在 SQLite 中有一个表,当在这个表中创建一个条目时,我想为第一个表中的每个条目创建一个新表。(如果有帮助,我想在 Ruby On Rails 中执行此操作)
这是一个示例,以阐明我要实现的目标:
假设有一个表:活动
活动
Campaign_ID、日期、名称
因此,如果我输入:
01 06/12 第一活动
有没有办法创建一个名为:{Campaign_ID}_Page 的新表
IE:
01_页面
(此表的字段在这里)
我在 SQLite 中有一个表,当在这个表中创建一个条目时,我想为第一个表中的每个条目创建一个新表。(如果有帮助,我想在 Ruby On Rails 中执行此操作)
这是一个示例,以阐明我要实现的目标:
假设有一个表:活动
活动
Campaign_ID、日期、名称
因此,如果我输入:
01 06/12 第一活动
有没有办法创建一个名为:{Campaign_ID}_Page 的新表
IE:
01_页面
(此表的字段在这里)
你为什么需要它?
我认为创建一个表 Pages 并为您的表 Campaigns 创建一个外键会更好。
一个例子(我使用 Sequel):
require 'sequel'
DB = Sequel.sqlite
DB.create_table :Campaigns do
primary_key :id
column :campaign_id, :integer
column :date, :date
column :name, :string
end
DB.create_table :Pages do
primary_key :id
foreign_key :campaign_id, :Campaigns
column :text, :string
end
key = DB[:Campaigns].insert(:campaign_id => 01, :date=> Date.new(2012,1,1), :name => 'FirstCampaign')
DB[:Pages].insert(:campaign_id => key, :text => 'text for FirstCampaign')
key = DB[:Campaigns].insert(:campaign_id => 02, :date=> Date.new(2012,1,1), :name => 'SecondCampaign')
DB[:Pages].insert(:campaign_id => key, :text => 'text for SecndCampaign')
#All pages for 1st campaign
p DB[:Pages].filter(
:campaign_id => DB[:Campaigns].filter(:campaign_id => 1).first[:id]
).all
但是要回答您的问题:您可以尝试使用模型钩子。
续集的一个例子:
require 'sequel'
DB = Sequel.sqlite
DB.create_table :Campaigns do
primary_key :id
column :campaign_id, :integer
column :date, :date
column :name, :string
end
class Campaign < Sequel::Model
def after_create
tabname = ("%05i_page" % self.campaign_id).to_sym
puts "Create table #{tabname}"
self.db.create_table( tabname ) do
foreign_key :campaign
end
end
end
p DB.table_exists?(:'01_page') #-> false, table does not exist
Campaign.create(:campaign_id => 01, :date=> Date.new(2012,1,1), :name => 'FirstCampaign')
p DB.table_exists?(:'00001_page') #-> true Table created
如果表已经存在,我的示例没有测试。如果你真的想使用它,