【问题标题】:are foreign key relationships for address table necessary地址表的外键关系是否必要
【发布时间】:2017-11-22 07:53:02
【问题描述】:

编辑:我认为我的措辞有误。请阅读外键作为外键约束。我意识到我需要地址表中的客户端 ID 等。

我有一个客户表。 编号 | pref_name |全名 |企业名称 |等等 。 . .

我意识到客户可以有多个位置/地址,所以我有一个地址表。 编号 |客户 ID |姓名 |地址1 |地址2 | sub_area_id | area_id |省_id | country_id |邮编 |等等 。 . .

然后我意识到客户可能来自多个国家,所以我补充说: 国家表 编号 |国家 |代码 (ISO-2A)

省表 编号 |姓名 | country_id

面积表 编号 |姓名 |省_id

子区域表 编号 |姓名 | area_id

所以现在我意识到我不需要所有的 sub_area_id | area_id |省_id |地址表中的 country_id。

从 sub_area_id 我可以通过连接查询获得其余部分,但是,并不总是有子区域 ID。总会有一个区域ID。我想我确实需要 sub_area_id | area_id 但可以删除 Province_id |地址表中的country_id

我不确定是否需要国家、省、地区、子区域表的外键?

似乎如果一个国家被删除,其他表格中的所有相关数据也应该被删除,但我很确定一个国家永远不会被删除。省、地区、子地区也一样。实现外键是不是浪费时间?

还有一个客户端可能被禁用(不会被删除,因为它会影响历史数据)所以外键也可以禁用客户端地址,还是没有必要禁用它们?同样,最好不要删除它们,因为客户端可能稍后会恢复。

对我的结构有什么改进建议吗? TIA

【问题讨论】:

  • FK 声明只是说某处的子行值必须出现在其他地方。因此,您可以声明每个 FK,除非它是由其他人暗示的,或者它会导致循环并且您的 DBMS 无法处理循环。但是,即使在未完成管理时约束会抱怨,也必须管理可以从另一个表中获取的表中的信息。重新删除有关“软删除”和“历史数据”的信息。一个经典的 DB 案例是一个已成交的订单,无论此后情况如何变化,它都保持在成交时的状态。 PS名称更改。国家等来来去去。
  • @philipxy - 谢谢。我以前没有听说过软删除这个词。我在 SO 上找到了一些很好的信息,并将实现以后可能需要删除的任何数据。

标签: mysql database foreign-keys


【解决方案1】:

是的,你肯定需要外键来引用客户的地址。如果地址表中没有客户的ID,则无法从地址表中检索客户的地址

【讨论】:

  • 谢谢。我意识到这一点。我不清楚术语,所以也许我的问题措辞不正确。我对其进行了编辑以尝试使我的要求更清楚。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-11
  • 2022-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-04
相关资源
最近更新 更多