ruby-on-rails - 使用具有不同属性的相似模型的 Rails 数据库设计

标签 ruby-on-rails database postgresql database-design hstore

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

他们各自拥有大约 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 模型: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

好处:

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

然后,对于表单 A,您可以在嵌套表单中加载移动使用情况的属性。用户的属性将保存到用户,手机信息将保存到手机,并带有引用。 Form B同理。

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

关于ruby-on-rails - 使用具有不同属性的相似模型的 Rails 数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16641915/

相关文章:

javascript - Rails Ajax 搜索

ruby-on-rails - 如何将 Heroku 日志保存到文本文件

mysql - 当从 MySQL 中的连接表中进行选择时,连接操作是否发生在选择之前?

sql - 如何在 Multi-Tenancy 数据库中使字段 NOT NULL

ruby-on-rails - 如果记录有两个条件返回 true else false,如何获取 Rails 4?

sql - PostgreSQL 约束 - 只有一行可以设置标志

ruby-on-rails - Rails 3.2 的隐藏属性未填充表单中的字段

ruby-on-rails - 带有erb的Rails : dynamic robots. txt

sql - SQL 中的慢速选择查询,表中只有 200 万条记录

mysql - MySql Xml函数的性能?