ER到关系映射:多值主键

时间:2010-07-07 08:03:04

标签: entity-relationship

当将ER图映射到关系模式时,我的教科书说在步骤中......无论如何......应该为多值属性创建新的关系S.但是如果多值属性是R的主键...那么R没有主键而S没有主键?

1 个答案:

答案 0 :(得分:2)

这是一个很好的问题,总是困扰我关于如何消除“复杂”类型的教科书解释。

您需要问的问题是:这些价值观确定了什么?你想要建模什么?大多数使用SQL的数据库架构师可能会说你应该创建一个新属性来识别构成你的多值属性的事物集。

另一种解决方案是将“复杂”类型作为第一类属性包含在其自身中 - 而不是“多值”属性,而是可以像任何其他值一样将变量分配给变量的集合或数组。 Tutorial D语言允许关系值类型与关系。 e.g:

VAR r BASE RELATION {foo RELATION {bar INTEGER} } KEY {foo};

其中foo是嵌套在r。

中的relvar 然而,

SQL不支持这样的任何内容。 SQL中支持嵌套表,但通常不允许嵌套表作为键的一部分,因此在SQL中,您始终必须创建新的标识属性。在一个真正的RDBMS中你可以说不应该创建另一个属性,因为任何支持的类型都应该支持成为一个键的一部分 - 如果它没有那么你甚至不能投射该属性,因为结果不会'包含一把钥匙。