我需要对一些数据进行规范化,而且我是后端/数据库编程的新手,所以这可能很明显,但我已经搜索过了,什么也找不到。
我有一张'empires'
表格。每个帝国都可以是'civilization'
以下之一:
- British
- French
- Dutch
- Ottoman
- Spanish
现在,empires
表包含一个名为civilization
的VARCHAR(255)类型的列,这就是上面一个字符串的存储位置。
当然,后来我意识到它的可扩展性不强,也不是一个好主意,所以我决定创建另一个名为civilization
的表,它包含两列,id和包含其名称的字符串。
我现在的问题是,例如,我如何确保所有'British'
帝国都指向civilization
表中完全相同的行?
更新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"> ]
您需要empires
表上的civilization_id
来存储civilizations
记录中的id。