Ruby on rails 具有不同属性的相似模型的Rails数据库设计
我正在设计一个应用程序,它有许多类型的“请求”,请求之间的处理性质非常相似,但它们包含不同的数据 它们每个都有大约1/3的相同信息、日期、用户信息等 但是,不同类型的请求具有完全不同的信息,一个请求在数据库中可以有大约30列 即 然后 我将有大约40个型号在最后,所以不想有单独的表 什么是最好的方式来表达这一点,我需要完全控制的显示和形式的布局 我以前使用HStore(与postgres一起)完成过这项工作,不知道是否还有其他建议 [编辑] 跨模型的相同属性示例:Ruby on rails 具有不同属性的相似模型的Rails数据库设计,ruby-on-rails,database,postgresql,database-design,hstore,Ruby On Rails,Database,Postgresql,Database Design,Hstore,我正在设计一个应用程序,它有许多类型的“请求”,请求之间的处理性质非常相似,但它们包含不同的数据 它们每个都有大约1/3的相同信息、日期、用户信息等 但是,不同类型的请求具有完全不同的信息,一个请求在数据库中可以有大约30列 即 然后 我将有大约40个型号在最后,所以不想有单独的表 什么是最好的方式来表达这一点,我需要完全控制的显示和形式的布局 我以前使用HStore(与postgres一起)完成过这项工作,不知道是否还有其他建议 [编辑] 跨模型的相同属性示例: :company_name,:
:company_name,:contact_person,:physical_address,:contact_email,:contact_phone
表格A示例:
:mobile_current_provider,:num_mobile_connections,:num_smartphones,:operating_system,:num_high_voice_users
表格B的例子
:kw_per_month, :weekend_power, :three_phase_power, :seasonal_difference
大多数字段都是字符串或整数(带有一些布尔值),但都可以强制转换为字符串。大多数数据仅用于显示,而非用于搜索和计算等的公共字段。您不需要多个表,因此可以使用STI
class A < C
class B < C
class C < ActiveRecord::Base
A类
您的C表将包含所有列、共享列、A字段和B字段。阅读添加的属性示例后,我的印象是,它们最好属于其他模型 我的建议是再创建两个ActiveRecord模型:
MobileUsage
和ElectricityUsage
class User < ActiveRecords::Base
has_one :mobile_usage
has_one :electricity_usage
end
class MobileUsage < ActiveRecords::Base
belongs_to :user
end
class Electricity < ActiveRecords::Base
belongs_to :user
end
class用户
好处:
- 更好的组织。移动属于移动使用,而电力属于电力使用
- 用户中没有空数据。如果您将所有属性放在一个模型用户中,则许多用户的移动信息没有电,反之亦然。这将在表中留下大量空数据
通过分离,您甚至可以允许用户先填写基本信息,然后再填写详细信息。一些属性的示例会很有帮助。从示例中可以看出,这非常有用,但问题是,这些属性将有约50个,它们都是可选的,应该单独处理objects@JamesWatling属性越多,这是一个坏主意,为什么在网络上到处都是,这已经被打得要死了。我建议通过快速搜索来了解原因。我研究这个主题已经有一段时间了,结论似乎是,如果模型是相似的,但是几乎没有共同的属性,那么就让它们成为自己的表和模型。
class A < C
class B < C
class C < ActiveRecord::Base
class User < ActiveRecords::Base
has_one :mobile_usage
has_one :electricity_usage
end
class MobileUsage < ActiveRecords::Base
belongs_to :user
end
class Electricity < ActiveRecords::Base
belongs_to :user
end