如何设计 SQL 表来满足这些要求

发布于 2024-11-08 02:57:46 字数 322 浏览 0 评论 0原文

我的数据为 CITYAREA

  1. 每个CITY有多个AREAS
  2. 每个AREA有多个AREAS(这里没有结束,用户可以动态添加< code>AREAS 在子 AREA 下,如 AREA->AREA->Area->AREA....->AREA

所以,如何设计满足这些要求的表结构?

提前致谢。

I have data as CITY and AREA.

  1. Each CITY has multiple AREAS
  2. Each AREA has multiple AREAS (here there is no end, dynamically user can add AREAS under the child AREA like AREA->AREA->Area->AREA....->AREA)

So, how to design such table structure which satisfy these requirements?

Thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

瑾兮 2024-11-15 02:57:46

城市表

  • CityID (PK)
  • CityName

城市区域表

  • CityID(复合(两列)PKey)
  • AreaID(如果您想要某个区域只能由一个城市拥有)

区域表

  • AreaID (PK)
  • AreaName

区域区域映射表

  • AreaID (所有者区域) (复合(两列) PKey)
  • AreaID

规则

  • 为了将一个区域映射到另一个区域,区域表中必须有每个区域的记录。
  • 在区域映射表中,您必须确定这些关系是双向还是单向。在我看来,这将是一种方式。第一AreaID是拥有第二AreaID的区域。

City Table

  • CityID (PK)
  • CityName

City Areas Table

  • CityID (Composite (two-column) PKey)
  • AreaID (Add a Unique Index to this column, if you want an area to be ownable by only one city)

Areas Table

  • AreaID (PK)
  • AreaName

Area Area Mapping Table

  • AreaID (Owner Area) (Composite (two-column) PKey)
  • AreaID

Rules

  • In order to map one area to another, there must be a record for each area in the Areas table.
  • In the Area Area Mapping Table, you must determine if these relationships are two-way or one-way. In my opinion, it will be one way. The first AreaID is the area that owns the second AreaID.
没有伤那来痛 2024-11-15 02:57:46

AREA

  • id(PK)
  • parent_area_id - 它所属的区域 - 如果没有父区域(AREA表上的FK)则可以为NULL
  • city_id - 它所属的城市 - 您可以从您的如果parent_area_id完成,则city_id为NULL的业务逻辑,反之亦然(城市表上的FK)
  • 其他有用的

列表CITY

  • id(PK)
  • 其他有用的信息

您可能感兴趣在阅读管理 MySQL 中的分层数据时 - 它也适用于其他数据库引擎

table AREA:

  • id (PK)
  • parent_area_id - the area to which it belongs - can be NULL if no parent area (FK on AREA table)
  • city_id - the city to which it belongs - you can enforce from your business logic that a city_id to be NULL if parent_area_id is completed, or vice versa (FK on city table)
  • other useful columns

table CITY:

  • id (PK)
  • other useful info

You might be interested in reading about Managing Hierarchical Data in MySQL - it also applies to other DB engines

乄_柒ぐ汐 2024-11-15 02:57:46

那将是一棵树(或者可能是一个层次结构)。最常见的解决方案(您将在此处的其他答案中看到)是使用邻接列表模型。然而,另一个需要考虑的“大”想法是嵌套集模型。关于该主题的一本有用的书是Joe Celko 的 SQL 中的树和层次结构

That would be a tree (or possibly a hierarchy). The most common solution, which you will see in other answers here, is to use the adjacency list model. However, the other 'big' idea to consider is the nested sets model. A useful book on the subject is Joe Celko's Trees and hierarchies in SQL.

失去的东西太少 2024-11-15 02:57:46

反射关系。

在此处输入图像描述

或者,如果您愿意嵌套集

在此处输入图像描述

Reflexive relationship.

enter image description here

Or, if you prefer nested sets.

enter image description here

‖放下 2024-11-15 02:57:46

对于 SQL Server 2008,选择的是层次结构数据类型

这是有关性能的链接

For SQL Server 2008 the choice is the hierarchy data type

Here is a link about the performance

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文