【问题标题】:Is there a benefit to creating a very generic data model for a Rails 3 Project?为 Rails 3 项目创建一个非常通用的数据模型有什么好处?
【发布时间】:2011-04-26 00:21:59
【问题描述】:

一个产品可以有很多关于它的内容,我将它们称为属性。它可以有一个简短的描述。但该描述可以使用多种语言。同样,它可以有多个价格,其中一些是特定于客户的。给定以下数据:

Product:
  identifier: 123-ABC

   Price:
     value: $1.25
     currency: USD
     customer: Wal-Mart

   Price:
     value: $1.96
     currency: USD

   Description:
     short: "A Widget"
     language: EN

   Description:
     marketing: "Made from Space Age Polymers."
     language: EN

在这里使用 STI 是否有意义,并制作一组通用模型:

Product has_many Properties
Property has_many Attributes

Price < Property
Description < Property
Package < Property

在数据模型中这种概括是否过于宽泛?我应该坚持使用常规模型及其关联表吗?

【问题讨论】:

    标签: ruby-on-rails database-design data-structures oop ruby-on-rails-3


    【解决方案1】:

    没有。

    认真的

    没有。

    至少不在 SQL 数据库中。

    如果您想使用 Cassandra 或 NoSQL 数据库,这正是所有内容的存储方式。

    Read my answer hereRead this

    想象一个包含名字、姓氏和出生日期的 SQL 表

    查找所有超过 30 年的 LNAME = Page。

    在一张桌子上

    选择 FNAME、LNAME、(SYSDATE - BDATE)/365 年龄 从人 WHERE LNAME = 'Page' 和 BDate

    现在在 EAV 中尝试一下

    发表你的答案。

    【讨论】:

    • 我不会,但我敢打赌它里面会有 EXISTS。我想他们都会。谢谢斯蒂芬 ;-)
    • 但这是我真正的问题。有很多潜在的产品属性本质上是复合的。就像一些值加上 language_code 或 unit_of_measure。将它们中的每一个都作为自己的模型甚至作为显式属性似乎很疯狂。我试图处理的数据标准有多个可能的属性,其中一些是复合的。但是每个产品只会“关心”大约50个左右。
    • AK,这是一个非常重要的点...关心,关心 50。这意味着过滤或分组等。首先,(我不相信这一点,因为我是一个数据成瘾者) 但是为什么你的数据库有没有人关心的数据。是的,我会坚持下去。在这些情况下,您必须考虑要如何处理它。如果您只是为了保留它而保留它,请将其放入 CLOB 或 XMLType 中。然后当第 51 个成为 CARED 时,添加该列并从 XML 存储中更新该列。
    • 另外,垂直分区或 PK-FK 表也没有问题。您将拥有一张带有 ID、名称、类别等的表......任何真正常见的东西。然后用 10 种语言说你的描述。所以它是产品和描述之间的一对多...创建一个带有 ID、LanguageCD、描述的描述表。等等...合理化每个属性以及它如何适应,它是如何共享的,它真的是 1-1 还是 1-many...
    • 现在,还有一件事。这是用于填充网站还是用于库存系统?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-10
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    • 2019-09-15
    • 1970-01-01
    • 2016-12-19
    相关资源
    最近更新 更多