2013-07-14 35 views
0

我在SQLite中有一个表,当在这个表中创建一个条目时,我想为第一个表中的每个条目创建一个新表。 (我想这样做的Ruby on Rails的,如果这能帮助)SQLite动态创建表

这里是为了澄清什么,我想实现一个例子:

假设有一个表:广告系列

广告活动

CAMPAIGN_ID,日期,姓名

所以,如果我做一个条目:

01 06/12 FirstCampaign

是有办法来创建一个名为新表:{CAMPAIGN_ID} _Page

即:

01_Page

(字段此表去这里)

+2

当然,只需将相应的CREATE TABLE发送到数据库。真正的问题是,你为什么要做这样的事情? –

+0

将大量的广告系列添加到他们的网页后,拥有一个网页表格变得非常庞大。我正在尝试限制每个广告系列的页面大小。如果你知道更聪明的方式来做到这一点,请告诉我。我知道我的解决方案不聪明哈哈。 –

+1

您似乎希望将单独的表格链接到广告系列表的每个记录?你考虑过MongoDB吗? – moritz

回答

0

你为什么需要它?

我认为最好是创建一个表格页面,并在表格中添加一个外键到表格广告系列。

一个例子(我用的续集):

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 

但是,为了回答你的问题:你可以尝试使用model hook

与续集的一个例子:

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 

我的例子还没有测试,如果表中已经存在。如果你真的想使用它,