我有一个旅行(主要:idTrip),我可以链接更多的包(主要:idPackage),因此,我有一个关系表来链接旅行包(primary:idRelTripPackage)。 (关系n-to-n)
然后我得到了一个注册表(primary:idRegistration)。我如何最好地链接这些(1对1的关系)?
答案 0 :(得分:3)
我是否正确地认为注册的关系是RelTripPackage,它绝对是一对一的。有几种选择:
1:因为它实际上是一对一的,所以没有什么可以阻止你将注册数据直接放到RelTripPackage上,反之亦然,并且将idPackage和idTrip直接放在注册为FK上,具有独特性键入两个FK列以确保没有重复。
2:如果确实需要两个单独的表,那么只需将idRetTripPackage作为FK添加到注册,然后再添加一个唯一约束 - 再次确保唯一性。
不需要单独的关系表作为它的1-1关系 - 当你使用n-n时它们才真正变得相关。其余的时间FK应该直接放在子表上。
答案 1 :(得分:1)
如果你遵循这个逻辑,你将
然而,问题(限制因素)是您开始使用的表实际上没有规范化。由于起始位置没有良好的基础,您最终会得到比实体之间实际存在的更多关系(在表格中)。所以最好的建议是,在您尝试此当前扩展之前,最佳做法是退回并规范化数据,即现有表。然后扩展会更容易,最终会减少表格。
通常,具有实体PK的1 :: 1属性应该是该实体中的属性。具有实体PK的1 :: 0-1的任何属性都应该在一个单独的表中。
根据提供的信息,这是您的▶Entity Relation Diagram◀。只要您使用关系标识符,就可以直接支持您到目前为止识别的所有关系(否则,如果您使用ID,则需要更多关系和表格)。
不熟悉关系数据库建模标准的读者可能会发现▶IDEF1X Notation◀很有用。