关联两个表时不相互冲突的数据策略

时间:2017-04-12 12:53:13

标签: sql foreign-key-relationship

我有一些看起来像这样的表:

+------------+------------+------------+----------------+----------+
| Locations  |  HotelsA   |  HotelsB   | HotelsB-People |  People  |
+------------+------------+------------+----------------+----------+
| LocationID | HotelAID   | HotelBID   | PersonID       | PersonID |
| Address    | HotelAName | HotelBName | HotelBID       | Name     |
|            | LocationID |            |                |          |
+------------+------------+------------+----------------+----------+

目前,如果我想知道有人留在酒店的地址是什么,没有办法在没有手动查看HotelsA的名称的情况下建立与该酒店名称相似的东西。

我想删除HotelBName并将其替换为HotelAID的外键(在此示例中,将HotelsB-People更改为HotelsAPeople实际上更有意义,但为了简单起见,我还省略了其他列,以防止在我的特定情况下可行的解决方案)。最终结果如下:

+------------+------------+-------------+----------------+----------+
| Locations  |  HotelsA   |   HotelsB   | HotelsB-People |  People  |
+------------+------------+-------------+----------------+----------+
| LocationID | HotelAID   | HotelBID    | PersonID       | PersonID |
| Address    | HotelAName | FK_HotelAID | HotelBID       | Name     |
|            | LocationID |             |                |          |
+------------+------------+-------------+----------------+----------+

HotelAName和HotelBName可能非常相似,但不一致。你可以在其中一个拥有“斯普林菲尔德万豪酒店”,在另一个拥有“斯普林菲尔德万豪酒店”,但没有一致性(也不保证任何拼写正确)。

是否有任何策略可以解决这个问题以及如何使用这些数据的应用程序在修复所有数据所需的时间内继续工作?

谢谢。

1 个答案:

答案 0 :(得分:0)

我只需将FK_HotelAID列添加到HotelsB表。为该列分配正确的ID主要是手动过程,但您可以尝试将HotelAName加入HotelBName,以至少覆盖具有完美匹配的名称的ID。执行此操作时,您的应用程序应继续工作。在HotelsB中分配了所有ID后,您可以定义外键,然后删除HotelBName列。当然,应用程序对HotelBName所做的任何引用都需要修改。