Ruby on rails 对于一个模型来说,~44列是否太多了?打破一对一的关系有意义吗?
我对附加了大量数据的模型的最佳实践感兴趣。我的大多数应用程序都是围绕一个模型(SKU)运行的,而且似乎有越来越多的东西与之相关Ruby on rails 对于一个模型来说,~44列是否太多了?打破一对一的关系有意义吗?,ruby-on-rails,ruby,postgresql,database-design,database-schema,Ruby On Rails,Ruby,Postgresql,Database Design,Database Schema,我对附加了大量数据的模型的最佳实践感兴趣。我的大多数应用程序都是围绕一个模型(SKU)运行的,而且似乎有越来越多的东西与之相关 例如,我的SKU模型有多个价格、维度、重量、多个价格级别的建议价格、标题、说明、保质期等。将所有定价信息拆分到另一个表中是否有意义?或者将SKU分解为SKU的不同用途,并将其关联起来?例如,WebSKU、StockSKU等。如Tom链接的答案中所述,如果所有属性都属于该模型,则没有理由将其分解。但是,如果您有price1、price2、price3或dimension\
例如,我的SKU模型有多个价格、维度、重量、多个价格级别的建议价格、标题、说明、保质期等。将所有定价信息拆分到另一个表中是否有意义?或者将SKU分解为SKU的不同用途,并将其关联起来?例如,WebSKU、StockSKU等。如Tom链接的答案中所述,如果所有属性都属于该模型,则没有理由将其分解。但是,如果您有
price1
、price2
、price3
或dimension\u x\u 1
、dimension\u y\u 1
、dimension\u x\u 2
等列,则通常意味着您应该创建另一个表来包含这些列
例如,您可以将其设置为具有以下模型
Sku
has_many :prices
has_many :dimensions
Price
belongs_to :sku
Dimension
belongs_to :sku
数据库的设计不应该根据它有多少列,而应该根据逻辑,特别是下面的逻辑。如果数据库中存在系统冗余,那么这就是将其拆分为多个表的标志。如果没有,就保持原样。正如其他人所说,数据库的设计应该响应其背后的逻辑。为什么?主要是因为它更容易维护和理解 我还打算让大家注意规范化规则,正如@sawa所做的那样 通常,这是一种规范化数据库的好方法,因为它提供了几个优点。你应该阅读维基百科链接(至少作为一个起点) 遵循常规规则将有助于您在设计数据库时考虑数据背后的逻辑 但也有它的优势。第一个(始终考虑)是优化读取性能。这基本上意味着在一个表上有数据,而在遵循正常规则时,您可能会在不同的表中有这些数据,并且当这些数据具有某种逻辑关系时,通常是有意义的 你必须根据你所面临的问题来达到平衡
另一方面,我可以看到您的帖子上的标签使用的是RubyonRails,它使用的是活动记录模式。您正在介绍的数据库模型的一个结果是,您可能会有一个同样复杂的域模型。我是说,非常大。我不知道您的项目的每一个细节,但我想它将很快发展成为一个,使您的代码难以维护、扩展和理解。考虑到DB引擎如何处理文件和内存,我认为设计数据模型是很好的。PostgreSQL的第一个瓶颈是文件IO。内存消耗也是一个重要部分。当PostgreSQL读取一些表数据时(仅供参考:仅索引扫描时不会读取表数据),它会读取8KB(编译时参数)页面。这样一个页面中的元组越多,-文件IO越少,内存消耗越少,缓存使用越好(命中率越高,预热速度越快,等等),性能越好 因此,如果有一个负载非常高的项目,考虑将常用数据分离到独立的表中是很有用的(下一步-将这些表放在SDD或强大的RAID上的单独表空间中)
也就是说,在逻辑简单性和性能调整之间应该有一些平衡。我没有在名称后面只是数字的字段,但我有托盘条形码、商品条形码、纸箱条形码、托盘价格、纸箱价格等。将它们分开有意义吗?托盘上有条形码和价格,纸箱上有条形码和价格,等等。好点。我已经很长时间没有回顾规范化规则了。我认为基于此,我可能会将不同的包装级别划分为各自的对象。