关于使用Rails进行数据库设计的问题。
我想知道我是否走在正确的轨道上,或者我是否让事情过于复杂。
场景:显示以下内容的公司列表:
我认为创建由数据库支持的4个模型是个好主意。
我有两个问题。
class Company < ActiveRecord::Base
# Table name = Companies
# name :string
# bio :text
# url :string
# email :string
# phone :string
# Location information
# address1 :string
# address2 :string
# city :string
# state :string
# postcode :string
# country :string
# Social media links
# facebook :string
# google :string
# linkedin :string
end
class Company < ActiveRecord::Base
# Table name = Companies
# name :string
# bio :text
# url :string
# email :string
# phone :string
has_many :locations
has_many :social_media_links
end
class Number < ActiveRecord::Base
# Table name = Numbers
number :string
company_id :integer
belongs_to :company
end
class Location < ActiveRecord::Base
# Table name = Locations
# address1 :string
# address2 :string
# city :string
# state :string
# postcode :string
# country :string
# company_id :integer
belongs_to :company
# I presume, you could also create a Country and State model
# and create a has_many and belongs_to associations,
# to allow for selections like in a dropdown box?
end
class SocialMediaLink < ActiveRecord::Base
# Table name = SocialMediaLinks
name :string
url: :string
company_id :integer
belongs_to :company
end
感谢您查看此问题。此外,如果有Rails开源项目,您可以建议学习并查看他们如何设计他们的数据库/活动记录关联,请告诉我。
答案 0 :(得分:1)
我想知道我是否走在正确的轨道上
你是,这是一个有效的问题。
如何构建数据的最大决定因素必须来自应用程序的范围。
如果您希望Company
有多个locations
,social media profiles
等,那么是,您最好分割数据。如果你只是期望公司拥有单一的数据,那么你只会给自己带来更多的问题而不是它的价值。
<强>扩展强>
如果需要,继续添加
您正在寻找的是 extensibility - 能够根据需要向您的系统添加数据。
如果您的公司拥有严格的数据结构,那么您可以使用单个模型/表格。如果您想添加额外的字段(新的social
帐户等),正确的做法是使用多模型方法。从技术上讲,两者都没有错。
-
我建议最好的方法是将嵌套模型嵌入 modules :
#app/models/company.rb
class Company < ActiveRecord::Base
has_many :locations, class_name: "Company::Location", dependent: :destroy
end
#app/models/company/location.rb
class Company::Location < ActiveRecord::Base
belongs_to :company
end
您应该只创建依赖模型,如果您需要为上述模型添加额外的记录/数据。