TJ *_*ntz 4 sql database database-design ruby-on-rails
我正在开展一个项目,在这个项目中我遇到了一个看似非常简单的场景设计的困难:
user
属于city
属country
,然而,city
参考可以是null
同时user
必须属于一个country
仍然.换句话说(在基本的 RoR模型语法中),
# class User < ActiveRecord::Base
belongs_to :city
belongs_to :country
validates_existence_of :country
# class City < ActiveRecord::Base
has_many :users
belongs_to :country
validates_existence_of :country
# class Country < ActiveRecord::Base
has_many :users
has_many :cities
Run Code Online (Sandbox Code Playgroud)
我这个超级简单设计的问题在于冗余太多了.一旦a city
被a 引用user
,country
引用就可以从它推断出来(换句话说,因为它已经在city
表中引用,所以在表中引用它似乎并不那么令人敬畏user
).
当A(城市)也唯一地标识B(国家)时会发生这种情况,但A是可选的,而B是强制性的.基本上,仅添加国家/地区是因为城市是可选的,而仍需要识别每个用户的国家/地区.
将国家和城市联系在一起的想法可能看起来很有吸引力,因为一个城市独特地"识别"了一个国家,但是:是吗?阿姆斯特丹不仅仅是荷兰的一个城市.
此外,它还带有您在评论中已经提到过的问题......您如何处理其他数据; 并列出这样的国家现在需要将它们从国家/城市合并中过滤掉.
您的原始设计可能感觉多余且数据方面可能是,但逻辑方面和需求方面则不然.我会坚持,因为它非常清楚,完美地反映了要求.而且我会学会忍受令人难以置信的冗余.你可能想出的任何"解决方案",以避免"冗余",可能会最终混淆水域.或者将来更难以定义查询.
归档时间: |
|
查看次数: |
236 次 |
最近记录: |