pka*_*ing 5 database-design ruby-on-rails has-many
假设以下数据模式:
Usage
======
client_id
resource
type
amount
Billing
======
client_id
usage_resource
usage_type
rate
Run Code Online (Sandbox Code Playgroud)
在这个例子中,假设我有多个资源,每个资源都可以以多种方式使用.例如,一个资源是a widget. Widgets可以foo编辑,他们可以bar编辑. Gizmos也可以foo编辑和bar编辑.这些使用类型以不同的费率计费,对于不同的客户可能甚至是不同的费率.每次(资源的)使用的发生都记录在Usage表中.每个计费率(用于客户端,资源和类型组合)存储在计费表中.
(顺便说一下,如果这个数据模式不是解决这个问题的正确方法,请提出建议.)
是否可以使用Ruby on Rails和ActiveRecord创建has_many从Billings到Usages 的关系,以便我可以获得给定计费率的使用情况列表?有has_many, :through没有我不知道的语法?
再一次,我可能会从错误的角度处理这个问题,所以如果你能想到更好的方法,请大声说出来!
sourceforge显然有一个项目可以扩展Rails的ActiveRecord并支持复合主键.我没有使用过此扩展程序,但它可能会对您有所帮助.它也是rubyforge的宝石.
从版本2.0开始,Plain Ruby on Rails不支持复合主键(参见HowToUseLegacySchemas).每个表必须有一个名为" id" 的单列自动增量键.
我看到的解释是:"如果你想使用遗留数据库,你只需要复合主键." 这当然是数据建模的一种荒谬无知的观点.
我看到的解决方案是:
显然是多余的外键,Billing试图强制部分参照完整性.但它并没有完全实现 - 它不会阻止您使用错误的客户端/资源/用法类型组合在Billing该引用中创建行Usage,而不是与Billing表中的引用行中的行匹配.
编辑: @Yarik:是的,你是对的.Usage引用更有意义Billing.
嗯.我制作了一张ER图,但我无法将其作为图像插入.
| 归档时间: |
|
| 查看次数: |
3728 次 |
| 最近记录: |