在上面的关系模式中,我们可以看出来实际上井的实体信息先于管道或管路存在,也就是作为客观世界中的情况可以没有依赖关系,所以我们有必要同时建立一种编码上并没有这种严格的分段式的依赖性的编码方案,也就是说不同层次之间的编码可以式相互独立的,而且不同层次之间的实体主键属性选择之间没有关联关系,是完全独立的。这样的话,不同层次的实体关系就可以独立地建立了。 仍然举管路和井的例子,这时井和管路主键属性是: NUM 井:WELL PATHNUM 管路:PIPE 这里管路和井主键属性的编码方式可以是独立的,也可以象上述情况中的有分段式编码的方案,毕竟这种方案在形式上对从属关系能够看得比较清晰。 有了这种独立性,也就同时带来了如何在不同层次的实体之间建立从属关系的问题。一般而言,可以有两种方法可以采用: · 采取将上层实体关系的主属性作为下层实体关系的外键的方法来取得关联关系。这种 方法应该是比较自然的。而且也不会违反范式要求。 井表 管路表 WELL PlPE NUM井号 pATH—NUM蕾路号 7 l PIPE—PATH—NUM臂路号......._J 这种方案的缺点在于对不同层次之间的实体的逻辑关系形式上不够清晰。
· 采取不同层次的实体分别建表,然后从属关系通过另外建立一张关系表来反映的方 法。 这种方法可以避免第一中方法带来的违反第二范式的可能性,而且在效果上也比将上层实体主属性作为外键的方法层次关系更加清晰一些。虽然也是可行的,但是它的缺点也是显而易见的。那就是它占用的资源更大,因为新加了一张实际上跟底层实体关系数量上处于一个级别的实体表,这就增加了的负担。 管路表 井一管路从属关系表 井表 WELL NUM井号 WELL_NUM井号 ¨f瑞q, 管路号 我们可以在中间的从属关系表中增加描述这种从属关系的非主属性来表示这种关系的性质是从属的分层关系。 从上述内容看出:从属关系的建模方式可以有多种,而其中的关键是如何选择编码方式,可以采用以编码来直接反映从属关系的方式来实现。这种方法要求底层实体关键字是上层和本层的主属性的一个组合。而这种组合的方式也不是唯一的: 例如,在原有的已经建立的系统中关于管道的关键字是: NUM PIPE_PATH PIPE_-NUM PATH 例如,在上述的主键主键属性中,PIPE NUM是ASD,501;而PIPENUM是数字I或2。而1和2本身是不可能单独作为关键字存在的,因为仅仅靠它是不能够唯一确定PIPE实体表中的其他非主键属性的。
所以这里可能会涉及两种编码的方案: 1.类似于管道系统中的上层实体表中的上层实体的关键字属性加上本层实体的编码共同构成,但是这里的本层实体编码实际上已经是各层的分段式编码的组合体了: 以实际上WELLNUM本身就可以难一地确定井实体表中的其他非主属性了。而它加上上层的实体的主属性,是为了反映从属关系,但是它违反了范式要求。经过具体分析我们知道虽然实质上不会带来违反范式的后果,但是必须在保证编码方案成立的前提下。 2.分段式编码.但与上述情况不同的地方是,本层实体的编码本身并不能唯一确定实体表中的其他非主属性。所以这个时候,该层实体的非主属性必须由上层实体关键字的土属性和本层编码的组合属性集才能唯一确定。 例如井实体表的主属性可以这样定义: PIPE_PATH_NUM WELL_-NUM义就不会出现实体关系定义本身违反第二范式的情况,但是在实际效果上.却和上述的编码方案没有什么区别。因为这两种编码方案都一个前提:就是这里定义的从属关系实体建立是上层实体的存在决定下层实体的存在。 3.还可能会出现I类和2类兼顾的编码方案。即在2类编码的基础上再加上所有层次编码的组合而形成的一条属性,也同时作为主属性之一,那么这种编码同样会有形式上违背第二范式的情况,之所以有这种编码方案,有以下主要原因: 1 、采用2类编码作为主属性的一部分的原因是分段式编码可能有某些作用。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-37192-21.html
晚安
如果他要耍赖