Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 具有不同属性的相似模型的Rails数据库设计_Ruby On Rails_Database_Postgresql_Database Design_Hstore - Fatal编程技术网

Ruby on rails 具有不同属性的相似模型的Rails数据库设计

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,:

我正在设计一个应用程序,它有许多类型的“请求”,请求之间的处理性质非常相似,但它们包含不同的数据

它们每个都有大约1/3的相同信息、日期、用户信息等

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

然后

我将有大约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

大多数字段都是字符串或整数(带有一些布尔值),但都可以强制转换为字符串。大多数数据仅用于显示,而非用于搜索和计算等的公共字段。您不需要多个表,因此可以使用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用户
好处:

  • 更好的组织。移动属于移动使用,而电力属于电力使用
  • 用户中没有空数据。如果您将所有属性放在一个模型用户中,则许多用户的移动信息没有电,反之亦然。这将在表中留下大量空数据
然后,对于表单A,您可以在嵌套表单中加载移动使用的属性。用户的属性将保存到用户,移动信息将保存到带有引用的移动设备。表格B与之类似


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

一些属性的示例会很有帮助。从示例中可以看出,这非常有用,但问题是,这些属性将有约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