具有可编辑部分的复合主键

问题描述 投票:0回答:1

我正在设计一个数据库,其中包含有关酒店及其位置的下表。

**Hotel**    
HotelId PK, HotelName AK-Unique

**HotelLocation**
(HotelId, HotelLocationName) PK

HotelNameHotelLocationName都必须是可编辑的。

由于这个原因,在Hotel表的情况下,我使用生成的不可变HotelId并将HotelName保留为具有唯一约束的备用键。

我可以对HotelLocation表执行相同的操作,然后将其更改为:

**HotelLocation**
HotelLocationId PK, (HotelId, HotelLocationName) AK-unique

问题是我还有很多与此相关的表,其中的FK(HotelId, HotelLocationName)使我与我不想丢失的Hotel有直接关系。我仍然可以使用此FK,但级联更新的问题仍然存在。

我虽然会以我可以拥有HotelLocationId PK的方式生成(HotelId, HotelLocationId),例如,为每个新记录取MAX(HotelLocationId) + 1作为特定的HotelId,但是如果有的话,我希望有一个替代解决方案是一个。

有没有通用的方法来处理这种情况?

database-design relational-database composite-key
1个回答
0
投票

我想我更了解您的问题。您有一个如下所示的酒店桌子。

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)上具有唯一索引,以便可以找到该位置的酒店。

正如您所看到的,关联有一些特征,例如创建日期,更新日期,也许还有其他特征。

关联表或联结表提供表之间的关联。

© www.soinside.com 2019 - 2024. All rights reserved.