3

我正在设计一个具有多种“请求”类型的应用程序,这些请求将以彼此非常相似的性质进行处理,但它们包含不同的数据。

他们每个人都有大约 1/3 的信息相同,日期,用户信息等。

但是不同类型的请求具有完全不同的信息,一个请求在数据库中可以有大约 30 列。

IE。

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

大多数字段是字符串或整数(带有一些布尔值),但都可以强制转换为字符串。大多数数据仅用于显示,而不是用于搜索和计算等的公共字段

4

2 回答 2

1

在阅读了添加的属性示例后,我的印象是它们最好属于其他模型。

我的建议是再创建两个 ActiveRecord 模型:MobileUsageElectricityUsage

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

好处:

  • 更好的组织。手机属于移动使用,电属于用电
  • 用户中没有空数据。如果你把所有的属性都放在一个模型用户中,一些用户有很多没有电的移动信息,反之亦然。这将在表中留下大量空数据。

然后,对于表单 A,您可以在嵌套表单中加载移动使用的属性。用户的属性将被保存到用户,移动信息将被保存到带有参考的移动设备。B 型类似。

通过分离,您甚至可以允许用户先填写基本信息,然后再填写详细信息。

于 2013-05-20T04:02:56.047 回答
0

你不想要几个表,所以你可以使用 STI

class A < C

class B < C

class C < ActiveRecord::Base

您的 C 表将包含所有列、共享列、A 字段和 B 字段。

于 2013-05-20T04:00:33.463 回答