Ruby on rails 一个或多个表
我有不同的测量方法。它们之间没有联系。比如说Ruby on rails 一个或多个表,ruby-on-rails,database-design,polymorphic-associations,single-table-inheritance,Ruby On Rails,Database Design,Polymorphic Associations,Single Table Inheritance,我有不同的测量方法。它们之间没有联系。比如说A,B和C。它们三个都有相同的结构,ID(integer),value(float),实验ID(integer)(与实验表相关) 我不知道存储此信息的最佳方式 A) 使用三个表(A、B和C)是否更好 B) 或者,最好将它们存储在一个名为measurements的表中,并添加一个名为measurement\u type的附加列来存储A、B或C(包括索引)的信息 在我的应用程序中,我希望有三个模型,分别称为A、B、和C 解决方案应该是快速的,因为对于每种测
A
,B
和C
。它们三个都有相同的结构,ID(integer)
,value(float)
,实验ID(integer)
(与实验表相关)
我不知道存储此信息的最佳方式
A) 使用三个表(A
、B
和C
)是否更好
B) 或者,最好将它们存储在一个名为measurements
的表中,并添加一个名为measurement\u type
的附加列来存储A
、B
或C
(包括索引)的信息
在我的应用程序中,我希望有三个模型,分别称为A
、B
、和C
解决方案应该是快速的,因为对于每种测量类型,一天可能有数亿甚至十亿个条目。此外,有一天可能会有测量类型D
,E
,…
,Z
顺便说一句,我使用的是Oracle企业数据库。由于度量类型可以增长,并且不限于A、B和C,因此建议使用选项B),因为它在需要时支持其他度量类型。根据您的评论,假设您关注的是查询性能(而不是插入性能),看起来您需要一个与此类似的模型:
使用<代码>测量< /COD>表(也考虑使用<代码>压缩< /代码>子句,因为将有许多行共享相同的前导<代码>实验ID ID/代码>) 索引
I1
由以下部分组成:{FEATURE\u ID,EXPERIMENT\u ID,MEASUREMENT\u TYPE,VALUE}
,顺序如下。考虑使用<代码>压缩< /代码>子句,因为将有许多行共享相同的前导<代码>特征库ID <代码> >
这为我们提供了两个B-树:
PK
下面的B树,即索引组织的表本身I1
下方的B树PK
B-树中进行单个索引范围扫描和no表堆访问(堆不存在),可以满足对EXPERIMENT\u ID
的查询。PK
B-树自然地将属于相同实验的行存储在一起,因此I/O最小化
对FEATURE_ID
的查询也可以通过单个范围扫描(在I1
B-树中)来实现。I1
是一个索引,因此不需要在PK
B树中进行双重查找。I1
B树自然地将属于相同功能的行存储在一起,因此I/O最小化
除非您对具有代表性的数据量进行了测量,并得出结论认为它提供了更适合您需要的性能权衡。您打算如何查询数据?另外,
ID
是否有任何内在含义?例如,它是否需要在A
、B
和C
之间唯一?它必须符合测量的顺序吗?此外,是否所有测量值都是浮动的?@BrankoDimitrijevicID
没有什么特别之处。最好是忽略它:-)。顺序并不重要。所有测量值都是浮点值
。如何区分恰好具有相同值的两个测量值
?请回答我的另一个问题:你打算如何查询数据?我不仅与实验有关。完整的结构包括实验id
和特征id
。实验和特征的结合是独一无二的。在一个实验中,有许多特征,每个特征都有一个值。一个值可以多次出现。我将查询属于一个实验的所有值。或属于一个特征的所有值(多个实验)。