-1

我需要规范化一些数据,而且我是后端/数据库编程的新手,所以这可能很明显,但我已经搜索过并且找不到任何东西。

我有一张'empires'桌子。每个帝国可以是'civilization'以下之一:

- British
- French
- Dutch
- Ottoman
- Spanish

现在,该empires表包含一个类型为 VARCHAR(255) 的列,civilization其中存储了上述字符串之一。

现在,当然,后来我意识到它的可扩展性不是很好,也不是一个好主意,所以我决定创建另一个名为的表civilization,其中包含 2 列,id 和包含它的名称的字符串。

我现在的问题是,例如,我如何确保所有帝国都指向table'British'中完全相同的行?civilization

4

1 回答 1

0

更新 2:1 到多关联

class Empire < ActiveRecord::Base
  attr_accessible :name
  belongs_to :civilization
end

class Civilization < ActiveRecord::Base
  attr_accessible :name
  has_many :empires
end

british = Civilization.new(:name => 'British')
british.empires.build(:name => 'Britian')
british.empires.build(:name => 'India')
british.save

india = Empire.where(:name => 'India')
britain = Empire.where(:name => 'Britain')

puts india.civilization == britain.civilization # => true
puts india.civilization.inspect                 # => <Civilization:0x04121231 @name="British">
puts india.civilization.empires.inspect         # => [ <Empire:0x0123443 @name="Britain">, <Empire:0x0124543 @name="India"> ]

你需要civilization_id在你的桌子上存储你的记录empires中的 id 。civilizations

于 2012-12-09T06:32:55.517 回答