在 MySQL 中绑定 2 个不同情况下的 3 个表
我没有找到解决方案,所以想请教您。
整个事情是我有 3 张表:城市、地区、机构。
- 区和城市有关系
现在当我想注册一个机构时,我必须选择该机构所属的区,但如果该城市没有任何区,我必须选择城市本身。那么,问题是,如何针对给定情况绑定这些表?
PS 地区和城市必须保持约束力
I did not found a solution to this, so I want to ask you.
The whole thing is that I have 3 tables: Cities, Districts, Institutions.
- Districts have a relationship with Cities
Now when I want to register an Institution, I have to choose a District from which the Institution belongs, but if that City doesn't have any district, I have to choose the City itself. So, the question is, how can I bind these tables for the given situation?
P.S. the Districts and Cities must remain bind
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
有2个表,“机构”和“区域”
允许“区域”链接到自身,即area_id,parent_area_id
这样您总是将机构链接到area_id,然后内部逻辑可以确定该区域是否被视为地区或一座城市。
所以你现在有了
,并且
Areas.type 字段是可选的,但如果你想这样定义它们,那么这可能是在数据库中执行此操作的一种方法(否则只需假设如果parent_area_id = 0那么它是一个城市,否则它是一个 这样,
当选择字段时,您所做的就是
您可以 100% 确定机构 area_id 链接到的位置,对于是否转到“地区”或“城市”表没有问号,它肯定会区域表反过来以相同的方式处理地区和城市,并以前端可能将其解释为城市或地区的格式呈现信息。或者,如果您确实想要的话,您可以更进一步
例如,即使该机构与城市中的特定区域相关联,也始终会返回城市名称
Have 2 tables, "Institutions" and "Areas"
Allow "Areas" to link to itself i.e. area_id, parent_area_id
This way you always link an Institution to an area_id, and then internal logic can deteremine whether that area is considered to be a District or a City.
So you now have
and
The areas.type field is optional but if you want to define them as such then that may be a way to do that within the database (else just assume that if parent_area_id = 0 then it's a city, else it's a district)
This way when selecting the field all you are doing is
You can be 100% certain where the institution area_id links to, there's no question mark over whether to go to the Districts or Cities table, it's definitely going to the areas table which in turn treats Districts and Cities in the same way and presents information in a format which your front end may then interpret as city or district. Optionally you could go a step further if you really wanted to
That for example would always return the city name even if the institution was tied to a specific district within a city
有一种肮脏、重复肮脏的方式来做到这一点:让机构有一个
SIGNED INT
类型的ID字段,负数指向城市的 ID,以及指向该地区的正数。这有助于轻松连接查询。再次强调:这是肮脏的,我建议您完全避免这种情况(例如,通过创建具有父字段的城市和地区的树表),但如果您无法更改模型,那么这是可行的。
There is a dirty, repeat dirty way of doing this: Have the institution have an ID field of type
SIGNED INT
, with negative numbers pointing to the ID of the City, and positive numbers pointing to the District. This does for easy joins on query.Again: This is dirty, I recommend you avoid the situation alltogether (e.g. by creating a tree-table of cities and districts with a parent field), but if you can't change your model, this works.
这种模式称为多态关联,用 SQL 很好地解决它并不容易。
FK
表示外键。您必须手动检查institution.location_id
是否指向一个地区或城市,而不是水果或其他任何东西。This pattern is called polymorph associations, and it's not easy to solve nicely with SQL.
FK
means foreign key. You have to check manually thatinstitution.location_id
points to a district or city, not a fruit, or whatever else.