为 Rails 3 项目创建一个非常通用的数据模型有什么好处吗?

发布于 2024-09-27 11:37:58 字数 641 浏览 1 评论 0原文

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

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

这种数据模型的泛化方式是否过于广泛?我应该坚持使用常规模型及其关联的表格吗?

A Product can have lots of things said about it, I'll call them Properties. It can have a brief description. But that description can be in multiple languages. Likewise, it can have multiple Prices, some which are specific to Customers. Given the following data:

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

Does it make sense to use STI here, and make a generic set of models:

Product has_many Properties
Property has_many Attributes

Price < Property
Description < Property
Package < Property

Is this way too broad of a generalization in the data model? Should I just stick with regular models and their associated tables?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

眼睛会笑 2024-10-04 11:37:58

不。

说真的,

不。

至少在 SQL 数据库中不是。

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

在此处阅读我的答案

阅读此内容 包含名字、姓氏和出生日期的 SQL 表

查找所有超过 30 岁的 LNAME = 页面。

在一个表中,它是

SELECT FNAME, LNAME, (SYSDATE - BDATE)/365 年龄
来自人
WHERE LNAME = '页面' 且 BDate < SYSDATE - 30*365

现在在 EAV 中尝试一下,

发布您的答案。

No.

Seriously

No.

at least not in a SQL database.

If you want to use Cassandra or a NoSQL database, that's exactly how everything is stored.

Read my answer here
and
Read this

Think of a SQL Table with First Name, Last Name, and Birth date

Find all the LNAME = Page older than 30.

in one table it's

SELECT FNAME, LNAME, (SYSDATE - BDATE)/365 age
FROM people
WHERE LNAME = 'Page' and BDate < SYSDATE - 30*365

Now try it in an EAV

Post your answer.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文