gpt4 book ai didi

ruby-on-rails - 如何存储与餐厅相关的城市和街区?

转载 作者:行者123 更新时间:2023-12-04 04:58:54 25 4
gpt4 key购买 nike

我有一份餐厅 list 。每一个都位于一个社区/地区,这是在一个特定的城市。

我如何将餐厅与社区和城市联系起来?我想做:

Restaurant (belongs_to) -> Neighborhood
Restaurant (belongs_to) -> City


Restaurant (belongs_to) -> Neighborhood
Neighborhood (belongs_to) -> City

采取一种或另一种方法的优点或缺点是什么,我应该选择什么?

谢谢

最佳答案

关系

第二组关系将是最合适的。正如 Mik_Die 提到的,主要原因是它被标准化了。如果您要查看第一个示例的数据库架构,您会看到如下内容

Restaurant (belongs_to) -> Neighborhood
Restaurant (belongs_to) -> City

Table: Restaurant
Column | Type |
---------------------------------------------
ID | Integer | Primary Key
name | String |
neighborhood_id | Integer | Foreign Key
city_id* | Integer | Foreign Key

Table: Neighborhood
Column | Type |
---------------------------------------------
ID | Integer | Primary Key
name | String |
city_id* | Integer | Foreign Key

Table: City
Column | Type |
---------------------------------------------
ID | Integer | Primary Key
name | String |

如果您查看我在旁边放置星号的列,您会看到它在两个不同的表中重复,这是您在规范化数据库时要避免的。

第二个模式将几乎相同。您只需删除 city_id餐厅的专栏。
Restaurant (belongs_to) -> Neighborhood
Neighborhood (belongs_to) -> City

Table: Restaurant
Column | Type |
---------------------------------------------
ID | Integer | Primary Key
name | String |
neighborhood_id | Integer | Foreign Key

Rails 的用武之地

你的帖子被标记为 Ruby on Rails,所以我认为讨论 Rails 如何看待这种关系很重要。您熟悉的 belongs_tohas_many协会。 Rails 为 has_many 提供了极好的扩展。与 :through选项。

我假设您有兴趣将 City 存储在 Restaurant 表中,因为您希望能够找到属于整个城市的所有餐厅。 :through has_many 的选项允许该功能。

你的模型看起来像这样
class Restaurant < ActiveRecord::Base
belongs_to :neighborhood
end

class Neighborhood < ActiveRecord::Base
has_many :restaurants
belongs_to :city
end

class City < ActiveRecord::Base
has_many :neighborhoods
has_many :restaurants, through: :neighborhoods
end

然后你可以做这样的事情
@neighborhood.restaurants # => Returns all restaurants for that neighborhood
@city.restaurants # => Returns all restaurants from each of the neighborhoods belonging to the city

关于ruby-on-rails - 如何存储与餐厅相关的城市和街区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16397755/

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