gpt4 book ai didi

sql - 中间可选模型的基本数据库设计

转载 作者:太空狗 更新时间:2023-10-30 01:55:14 25 4
gpt4 key购买 nike

我正在从事一个项目,在这个项目中,我在为一个看似非常简单的场景进行设计时遇到了一些困难:

user 属于 city 属于 country,但是 city 引用可能是 nulluser 必须属于 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

我对这个 super 简单的设计的问题是有太多的冗余。一旦 cityuser 引用,就可以从中推断出 country 引用(换句话说,因为它已经被引用了在 city 表中,在 user 表中也引用它似乎不太好。

最佳答案

当 A(城市)也唯一标识 B(国家/地区)时会发生这种情况,但 A 是可选的而 B 是强制性的。基本上,添加 Country 只是因为 City 是可选的,而仍然需要识别每个用户的国家/地区。

将国家和城市联系在一起的想法可能看起来很有吸引力,因为一个城市可以唯一地“识别”一个国家,但是:是吗?您知道,阿姆斯特丹不仅仅是荷兰的一座城市。

此外,它还带有您在评论中已经提到的问题……您如何处理额外的数据;并且现在列出国家/地区需要将它们从国家/城市合并中过滤掉。

您的原始设计可能会让人觉得多余,在数据方面可能是这样,但在逻辑方面和需求方面却不是。我会坚持使用它,因为它非常清晰并且完美地反射(reflect)了要求。我会学会忍受明显的冗余。您为避免“冗余”而可能提出的任何“解决方案”,很可能最终只会把水搅浑。或者将使将来定义查询更加困难。

关于sql - 中间可选模型的基本数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3210210/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com