2010-07-07 34 views
4

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

回答

2

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

你需要问的问题是:什么是由这组值所确定的?你想要建模什么?大多数使用SQL的数据库架构师可能会说你应该发明一个新的属性来标识可能构成多值属性的一系列事物。

另一种解决方案是将“复杂”类型作为自己的第一类属性 - 不是“多值”属性,而是可以像任何其他值一样指定给变量作为单个值的集合或数组。教程D语言允许关系类型与关系。例如:

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

其中foo是嵌套在r中的relvar。

但是SQL不支持这样的东西。 SQL中支持嵌套表,但通常不允许将其作为键的一部分,所以在SQL中,您必须创建新的标识属性。在一个真正的RDBMS中,你可能认为不应该创建另一个属性,因为任何受支持的类型都应该支持作为关键的一部分 - 如果没有,那么你甚至不能在该属性上进行项目投射,因为结果不会,不包含密钥。