如何为这些要求设计SQL表

时间:2011-05-18 05:02:54

标签: sql database-design

我的数据为CITYAREA

  1. 每个CITY都有多个AREAS
  2. 每个AREA都有多个AREAS(此处没有结束,动态用户可以在AREAS之类的AREA下添加AREA->AREA->Area->AREA....->AREA
  3. 那么,如何设计满足这些要求的表结构?

    提前致谢。

5 个答案:

答案 0 :(得分:2)

城市表

  • CityID(PK)
  • CITYNAME

城市地区表

  • CityID(复合(两列)PKey)
  • AreaID(如果您希望某个区域只能由一个城市拥有,则为此列添加唯一索引)

区域表

  • AreaID(PK)
  • AREANAME

区域地图制图表

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

<强>规则

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

答案 1 :(得分:1)

AREA

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

CITY

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

您可能有兴趣阅读Managing Hierarchical Data in MySQL - 它也适用于其他数据库引擎

答案 2 :(得分:1)

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

答案 3 :(得分:1)

反身关系。

enter image description here

或者,如果您更喜欢 nested sets

enter image description here

答案 4 :(得分:1)

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

以下是有关performance

的链接
相关问题