我正在设计一个具有多种类型“请求”的应用程序,这些请求将以非常相似的性质彼此处理,但它们包含不同的数据。
他们各自拥有大约 1/3 的信息,日期、用户信息等。
但是不同类型的请求有完全不同的信息,一个请求在数据库中大概有30列。
即。
Form A
Date Submitted
User
Email
Provider
Attribute A
Attribute B
Attribute C
Attribute D
然后
Form A
Date Submitted
User
Email
Provider
Attribute E
Attribute F
Attribute G
Attribute H
我最后会有大约 40 个模型,所以不想有单独的表。
表示此内容的最佳方式是什么,我需要完全控制显示和表单的布局。
我之前已经使用 HStore(使用 postgres)完成了这项工作,想知道是否还有其他建议。
[编辑]
跨模型的相同属性示例:
: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
大多数字段要么是字符串要么是整数(有一些 bool 值),但都可以强制转换为字符串。大多数数据只是用于显示,除了将用于搜索和计算等的公共(public)字段
最佳答案
在阅读了添加的属性示例后,我的印象是它们最好属于其他模型。
我的建议是再创建两个 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
好处:
- 更好的组织。 mobile属于mobile usage,electricity属于electric usage
- 用户中没有空数据。如果你把所有的属性都放在一个模型User里面,有的用户很多手机信息没电,反之亦然。这将在表中留下大量空数据。
然后,对于表单 A,您可以在嵌套表单中加载移动使用情况的属性。用户的属性将保存到用户,手机信息将保存到手机,并带有引用。 Form B同理。
通过分离,您甚至可以让用户先填写基本信息,然后再填写详细信息。
关于ruby-on-rails - 使用具有不同属性的相似模型的 Rails 数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16641915/