系统中的表,一般使用主外键都比较多。主外键的定义和标准用法大家都很熟悉,只是实际使用时很少规范使用。比如有时主键是number类型,外键就定义成了varchar2类型。因为oracle中支持number类型的数字和varchar2类型的数字自动转换,所以不会出现什么问题。
比如,表test1
所以当使用主外键表关联时,如果没法做到主外键的字段类型最好保持一致,不然随着数据量的增多,业务的复杂成都增加,会出现更多莫名其妙的问题。
比如,表test1
ID,name 11,aa 12,bb 13,cc表test2,TID字段varchar2类型,
ID,TID,name 1,11,ff 2,12,gg 3,13,hh如下join查询,没什么问题
select t1.ID AS ID1,t2.ID AS ID2,t1.NAME AS NAME1,t2.NAME AS NAME2 from test1 t1 join test2 t2 on t1.id = t2.TID where 1=1;但是,再给test2加一行,
ID,TID,name 1,11,ff 2,12,gg 3,13,hh 4,tt,ii再执行上述查询,就会提示 ORA-01722:无效的数字。因为TID字段实际的内容的值已经不是数字了。无法自动转换了。
所以当使用主外键表关联时,如果没法做到主外键的字段类型最好保持一致,不然随着数据量的增多,业务的复杂成都增加,会出现更多莫名其妙的问题。