oracle 问题,请教高手了……
比如说一列:ID,定义它为主键了,name不是主键。那么定义外键的时候,只能参照ID?就是说只能参照已经定义成主键的?不能是其它的?外键不能是name?因为它不是主键?是...
比如说一列:ID,定义它为主键了,name不是主键。那么定义外键的时候,只能参照ID?就是说只能参照已经定义成主键的?不能是其它的?外键不能是name?因为它不是主键?是不是这样?
展开
展开全部
外键的作用是两个表之间建立关联。因此,两个表有主次的关系,次表的某一个字段通过外键参照主表相对应的字段。创建外键有两个要求:
1、作为外键的字段在主表中一定是主键或者是具有唯一约束(Unique)的字段;
2、作为外键的字段与主表中所参照的字段是同一类属性(字段名字可以不同)。
从这两个规则可知,在问题中提到的字段name即使不是主键,只要它是被约束为唯一(Unique)就可以做外键的参照字段。
1、作为外键的字段在主表中一定是主键或者是具有唯一约束(Unique)的字段;
2、作为外键的字段与主表中所参照的字段是同一类属性(字段名字可以不同)。
从这两个规则可知,在问题中提到的字段name即使不是主键,只要它是被约束为唯一(Unique)就可以做外键的参照字段。
追问
怎么和上面的说的不同:本表的列必须与外键类型相同,而且外键必须是外表的主键。不是说只要它是被约束为唯一(Unique)就可以做外键的参照字段?不定义为主键也可以啊?
展开全部
不仅仅是由于主键唯一的原因,如果这样理解,唯一键也可以做外键了,但实际定义后发现这样是不允许的。
因为建立外键的前提: 本表的列必须与外键类型相同,而且外键必须是外表的主键。
因为建立外键的前提: 本表的列必须与外键类型相同,而且外键必须是外表的主键。
追问
你们说的,谁说得对啊:
本表的列必须与外键类型相同,而且外键必须是外表的主键。不是说只要它是被约束为唯一(Unique)就可以做外键的参照字段?不定义为主键也可以啊?
追答
你试试就知道谁说的对了。把某一列设为唯一索引,看看这列能不能做外键。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
外键如果不和主键也就是id关联 比如用name的话会出现一对多的情况
比如2个人id不一样 名字一样 如果用name做外键 关联另外一张表就会有一对多
造成数据的重复
比如2个人id不一样 名字一样 如果用name做外键 关联另外一张表就会有一对多
造成数据的重复
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不会啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询