我正在设计一个数据库,其中包含有关酒店及其位置的下表。
**Hotel**
HotelId PK, HotelName AK-Unique
**HotelLocation**
(HotelId, HotelLocationName) PK
HotelName
和HotelLocationName
都必须是可编辑的。
由于这个原因,在Hotel
表的情况下,我使用生成的不可变HotelId
并将HotelName
保留为具有唯一约束的备用键。
我可以对HotelLocation
表执行相同的操作,然后将其更改为:
**HotelLocation**
HotelLocationId PK, (HotelId, HotelLocationName) AK-unique
问题是我还有很多与此相关的表,其中的FK(HotelId, HotelLocationName)
使我与我不想丢失的Hotel
有直接关系。我仍然可以使用此FK,但级联更新的问题仍然存在。
我虽然会以我可以拥有HotelLocationId
PK的方式生成(HotelId, HotelLocationId)
,例如,为每个新记录取MAX(HotelLocationId) + 1
作为特定的HotelId
,但是如果有的话,我希望有一个替代解决方案是一个。
有没有通用的方法来处理这种情况?
我想我更了解您的问题。您有一个如下所示的酒店桌子。
Hotel
-----
Hotel ID
Hotel Name
...
酒店ID是主键。这是一个盲键,意味着除了识别酒店(例如Holiday Inn)外,它没有任何意义。这是一个整数序列,从零开始,对于表中的每家酒店,递增1。
您还有酒店位置表。
Hotel Location
--------------
Hotel Location ID
Hotel Location
...
酒店位置ID是另一个盲主键。
您创建关联表以将这些表绑定在一起。我假设假日酒店可以有许多位置,因此,酒店表和酒店位置表之间存在一对多的关系。
Hotel Association
-----------------
Hotel ID
Hotel Location ID
Date location established
...
主键既是酒店ID,又是酒店位置ID。这是建立两个表之间关系的表。
您还应该在酒店位置ID(酒店ID)上具有唯一索引,以便可以找到该位置的酒店。
正如您所看到的,关联有一些特征,例如创建日期,更新日期,也许还有其他特征。
关联表或联结表提供表之间的关联。