ruby-on-rails – 是否可以在rails中使用复合外键?
假设以下数据模式:
Usage ====== client_id resource type amount Billing ====== client_id usage_resource usage_type rate 在这个例子中,假设我有多个资源,每个资源都可以以多种方式使用.例如,一个资源是一个小部件.小部件可以被愚弄,它们可以裸露. Gizmos也可以被愚弄和裸露.这些使用类型以不同的费率计费,对于不同的客户可能甚至是不同的费率.每次(资源的)使用的发生都记录在Usage表中.每个计费率(用于客户端,资源和类型组合)存储在计费表中. (顺便说一下,如果这个数据模式不是解决这个问题的正确方法,请提出建议.) 是否可以使用Ruby on Rails和ActiveRecord创建从Billings到Usages的has_many关系,以便我可以获得给定计费率的使用情况列表?是否有has_many的语法:通过我不知道的? 再一次,我可能会从错误的角度处理这个问题,所以如果你能想到更好的方法,请大声说出来! 解决方法
sourceforge显然有一个项目可以扩展Rails的ActiveRecord并支持
Composite Primary Keys.我没有使用过这个扩展,但它可能对你有所帮助.它也是rubyforge的宝石.
从版本2.0开始,Plain Ruby on Rails不支持复合主键(参见HowToUseLegacySchemas).每个表必须有一个名为“id”的单列自动增量键. 我看到的解释是:“如果你想使用遗留数据库,你只需要复合主键.”这当然是数据建模的一种荒谬无知的观点. 我看到的解决方案是: > Usage.client_id – > Client.id Billing中明显多余的外键试图强制部分引用完整性.但它并没有完全实现 – 它不会阻止您在Billing中创建行,使用错误的客户端/资源/用法类型组合引用Usage中的行,而不是与Billing表中的引用行中的行匹配. 编辑:@Yarik:是的,你是对的.用法引用结算更有意义. > Usage.billing_id – > Billing.id 嗯.我制作了一张ER图,但我无法将其作为图像插入. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |