sql - 具有关系的 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
解决方案
我通常会建议分层结构。也就是说,将父 id 添加到两个表中的每一个。
为什么?这保证了给定省份的区域总是相同的。这在 3 路接线表中很难保证。毕竟,这三个实体之间没有独立的关系。您有一个层次关系,并且您希望强制执行该数据完整性。
独立关系的一个例子是:
- 顾客
- 项目
- 付款方式
据推测,客户可以使用任何付款方式购买任何商品——甚至在同一商品上使用不同的付款方式。
我会一直推荐这种结构吗?嗯,不。如果数据没有被修改,那么使用三向表是非常安全的。它非常适合查找有关“城市”的信息。可以在创建时进行验证。它可能会提供一些简化(特别是如果层次结构更深)。
也就是说,当您的联接处于最低级别时,它的效果最好。获得一个省的区域有点棘手。一个典型的解决方案是使用NULL
值来扩充数据city
以获得该信息。
推荐阅读
- asp.net-core - 如果用户在 as.net 中经过身份验证但未经授权,则需要重定向到另一个页面
- python - 如何在docker中安装python36和python36-dev:oraclelinux:7-slim
- javascript - Node.js 解析查询字符串
- google-chrome - 在正文加载时提交 PayPal 表单时,Chrome 浏览器控制台窗口中的 Samesite cookie 警告问题
- javascript - 在编辑器文本中粘贴屏幕截图时获取重复图像
- java - 如何从 Android 应用程序调用部署到 Google Cloud Platform 上的功能?
- python - 实现 UI Tkinter 时遇到问题
- codeigniter-4 - 允许内存大小 Codeigniter 4
- google-kubernetes-engine - kubectl get all -n cass-operator 的输出中的 2/2 是什么意思
- php - Laravel HasOneThrough 关系