首页 > 解决方案 > 具有关系的 3 个或更多表的结构

问题描述

我需要有关数据库结构的帮助,

所以我需要加入 3 个表,但我很困惑什么结构是正确的方法。

区域表

id     region_name
1      Region1
2      Region2

id    province_name
1     Province1

城市

id     city_name
1      city1

我正在考虑创建连接所有的新表。

喜欢id, region_id, province_id, city_id

region_province_city

id    region_id    province_id    city_id
1     1            1              1 
2     1            1              2

或者我可以这样做

id    province_name  region_id
1     Province1      1

城市

id     city_name     province_id
1      city1         1

标签: sql

解决方案


我通常会建议分层结构。也就是说,将父 id 添加到两个表中的每一个。

为什么?这保证了给定省份的区域总是相同的。这在 3 路接线表中很难保证。毕竟,这三个实体之间没有独立的关系。您有一个层次关系,并且您希望强制执行该数据完整性。

独立关系的一个例子是:

  • 顾客
  • 项目
  • 付款方式

据推测,客户可以使用任何付款方式购买任何商品——甚至在同一商品上使用不同的付款方式。

我会一直推荐这种结构吗?嗯,不。如果数据没有被修改,那么使用三向表是非常安全的。它非常适合查找有关“城市”的信息。可以在创建时进行验证。它可能会提供一些简化(特别是如果层次结构更深)。

也就是说,当您的联接处于最低级别时,它的效果最好。获得一个省的区域有点棘手。一个典型的解决方案是使用NULL值来扩充数据city以获得该信息。


推荐阅读