gpt4 book ai didi

ruby-on-rails - 州、市、区数据库设计

转载 作者:搜寻专家 更新时间:2023-10-30 20:10:04 24 4
gpt4 key购买 nike

我在用户表中表示了用户,需要设计一个模型将他们与他们选择的州/城市/地区相关联:

在数据库方面,

每个用户将与 1 个州、1 个城市和该州/城市组合内的多个地区相关联。例如,用户 A 可以选择与“NY”和“Brooklyn”以及“Brooklyn”中的任意 X 个区(或无)相关联。

在 View 方面,

我想用复选框显示地区选择,这样它们应该能够很容易地从 Rails 中的 simple_form 数据库字段中提取出来。

数据库的设计应便于用户查询并获取用户选择的关联州/市、区关系。

我的一个想法是简单地为选区设置一个一对多字段和一个列出所有不同选区的选区表。但是,有没有一种方法可以强制要求这些地区必须对后端使用验证的城市/州组合有效?

如有任何提示,我们将不胜感激。

最佳答案

下面我根据您提供的信息概述了我将使用的数据库模式。

每个城市都属于一个州。

cities
id unsigned int(P)
state_id unsigned int(F states.id)
name varchar(50)

+----+----------+---------------+
| id | state_id | name |
+----+----------+---------------+
| 1 | 33 | New York City |
| .. | ........ | ............. |
+----+----------+---------------+

参见 ISO 3166了解更多信息。您没有要求国家,但添加它们很简单...

countries
id char(2)(P)
iso3 char(3)(U)
iso_num char(3)(U)
name varchar(45)(U)

+----+------+---------+---------------+
| id | iso3 | iso_num | name |
+----+------+---------+---------------+
| ca | can | 124 | Canada |
| mx | mex | 484 | Mexico |
| us | usa | 840 | United States |
| .. | .... | ....... | ............. |
+----+------+---------+---------------+

每个区都属于一个城市。

districts
id unsigned int(P)
city_id unsigned int(F cities.id)
name varchar(50)

+----+---------+-----------+
| id | city_id | name |
+----+---------+-----------+
| 1 | 1 | The Bronx |
| 2 | 1 | Brooklyn |
| 3 | 1 | Manhattan |
| .. | ....... | ......... |
+----+---------+-----------+

参见 ISO 3166-2:US了解更多信息。每个州都属于一个国家。

states
id unsigned int(P)
country_id char(2)(F countries.id)
code char(2)
name varchar(50)

+----+------------+------+----------+
| id | country_id | code | name |
+----+------------+------+----------+
| 1 | us | AL | Alabama |
| .. | .......... | .... | ........ |
| 33 | us | NY | New York |
| .. | .......... | .... | ........ |
+----+------------+------+----------+

根据您的信息,一位用户恰好属于一个城市。在示例数据中,鲍勃与纽约市相关联。通过连接表格,您可以很容易地发现 Bob 在纽约州和美国国家/地区。

users
id unsigned int(P)
username varchar(255)
city_id unsigned int(F cities.id)
...

+----+----------+---------+-----+
| id | username | city_id | ... |
+----+----------+---------+-----+
| 1 | bob | 1 | ... |
| .. | ........ | ....... | ... |
+----+----------+---------+-----+

用户可以属于任意数量的地区。在示例数据中,鲍勃属于布朗克斯区和布鲁克林区。 user_iddistrict_id 构成主键,确保用户不能多次与同一地区相关联。

users_districts
user_id unsigned int(F users.id) \_(P)
district_id unsigned int(F districts.id) /

+---------+-------------+
| user_id | district_id |
+---------+-------------+
| 1 | 1 |
| 1 | 2 |
| ....... | ........... |
+---------+-------------+

我的数据库模型没有强制执行用户所属的地区必须在用户所属的城市中的规则——在我看来,逻辑应该在应用程序级别完成。如果鲍勃从纽约市搬到巴尔的摩,我认为他的所有记录都应该从 users_districts 表中删除,然后为他的新城市添加任何新记录。

至于用户界面,我会让用户:

  1. 选择一个国家 - 这将自动填充相关州的下拉列表。
  2. 选择一个州 - 这将自动填充相关城市的下拉列表。
  3. 选择一个城市 - 这将自动填充相关地区的列表。
  4. 允许用户选择任意数量的地区。

关于ruby-on-rails - 州、市、区数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20412310/

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