你好,之前我向你请教了一个问题,在这里: http://zhidao.baidu.com/question/468115446.html?quesup2
你最后说:如果实施了参照完整性原则,不应当出现右连接的,没有意义。为什么啊??那为什么左连接就可以呢??...
你最后说:如果实施了参照完整性原则,不应当出现右连接的,没有意义。为什么啊??
那为什么左连接就可以呢?? 展开
那为什么左连接就可以呢?? 展开
展开全部
当我们把2张表建立联系的时候,这2个表肯定是有关系的。如果它是一对一的关系,完全可以合并成1张表;如果是多对多的关系,这是不允许出现的(说明表及其关系设置有问题);大多数都是一对多的关系,当建立了一对多关系时数据库引擎就自然建立完整性原则,它能保证2个表之间的关系及数据得到正确的维护,从最基本的意义上说,防止“多端”出现不完整的记录。
参照完整性规则要求:1、不允许在“多端”的主键中输入1个“一端”主键不存在的值;比如例子中分数表中的学号为4的记录(实际上不应当存在),虽然学号4的有语文数学分数,但学生表中没有学号4的记录,那这个成绩不能具体到某个人,它毫无意义。但,“多端”可以没有整条记录,比如某个学生没参加考试,自然就没有记录了。2、如果某一记录有相关的记录存在于关系表中,那么数据库引擎不允许从“一端”删除这个记录(除非选择了级联删除相关字段,这样会同时删除“一端”和“多端”的记录,从而保证数据的完整性),因为如果允许又回出现第一种情况。3、如果某一记录有相关的记录存在于关系表中,那么数据库引擎不允许改变“一端”主键的值(除非选择了级联更新相关字段,这样会同时更新“一端”和“多端”的主键值,从而保证数据的完整性),因为如果允许又回出现第一种情况。
我给你的例子中,学生表相当于“一端”,分数表相当于“多端”,如果实施了参照完整性规则,分数表正常情况下不应当有多余的记录(像出现学号4的记录那样,实际上它是多余的、没有意义的记录),“多端”(分数表)记录都是有相对应于“一端”(学生表)的,选择等值连接即可,所以右连接出现几率很小,但要说明的是,在极端情况下(或者数据库设置有瑕疵),有时允许有目的地违反规则。
参照完整性规则要求:1、不允许在“多端”的主键中输入1个“一端”主键不存在的值;比如例子中分数表中的学号为4的记录(实际上不应当存在),虽然学号4的有语文数学分数,但学生表中没有学号4的记录,那这个成绩不能具体到某个人,它毫无意义。但,“多端”可以没有整条记录,比如某个学生没参加考试,自然就没有记录了。2、如果某一记录有相关的记录存在于关系表中,那么数据库引擎不允许从“一端”删除这个记录(除非选择了级联删除相关字段,这样会同时删除“一端”和“多端”的记录,从而保证数据的完整性),因为如果允许又回出现第一种情况。3、如果某一记录有相关的记录存在于关系表中,那么数据库引擎不允许改变“一端”主键的值(除非选择了级联更新相关字段,这样会同时更新“一端”和“多端”的主键值,从而保证数据的完整性),因为如果允许又回出现第一种情况。
我给你的例子中,学生表相当于“一端”,分数表相当于“多端”,如果实施了参照完整性规则,分数表正常情况下不应当有多余的记录(像出现学号4的记录那样,实际上它是多余的、没有意义的记录),“多端”(分数表)记录都是有相对应于“一端”(学生表)的,选择等值连接即可,所以右连接出现几率很小,但要说明的是,在极端情况下(或者数据库设置有瑕疵),有时允许有目的地违反规则。
追问
也就是说,你说的右链接没有意义是因为,如果选择右链接的话,可能出现分数没有主体这种情况,这样记录就不知道是谁的,所以没有意义了。但是,如果是左链接的话,顶多就是主体(学生)没有参加考试所以没有成绩,这样就可以。 是这样吗??
这样一来,以后如果那个表是一端,那么它在左的话选左链接就有意义,如果在右,选右链接就有意义,是这样吗??
那我们怎么确定哪个表是一端,哪个是多端??
追答
是的,你的理解很对。
至于“一端”选择左连接还是等值连接,可根据具体需求而定,比如,你只想知道已参加考试的学生情况,你就选等值连接;你想知道所以学生的情况,你就选左连接好了。
但怎么确定“一端”“多端”?我还真不知怎么说,实际上“一端”的联接字段的值是不会有重复的,就像学生表的学号123一样,而“多端”往往会有重复的,像例子上的分数表学号11244一样。
来自:求助得到的回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询