今天在写一个业务
三个表,其中一个表A含三个外键 manytoone指向另外三个表的主键
写的过程中在想不用外键可以么?
就是 比如三个表的格式是(id,name)
我在浏览器上  搜索的时候  输入的是一个表的name  然后转换成id,然后用这个值搜索表A不是也可以么?
而实际上大多都加了外键 难道这样和搜索效率有关?
有没有指点下的A(aid,anameid,abuildid,aseid)
B(bid,bname)
C(cid,cname)
D(did,dname)如果没有外键,我输入bname搜索表A  首先把bname转换成bid  然后bid和  anameid是有关系的(虽然我没加外键),那也可以搜索到结果的。为什么要加外键呢?回答皆有分。

解决方案 »

  1.   

    现在数据库所用的数据模型基本上是关系模型,关系数据库的完整性中有一项是参照的完整性。设F是关系R的一个或一组属性,但不是关系R的键。如果F与关系S的主键相对应,则称F是关系R的外键,并称R为参照关系,S为被参照关系或目标关系。参照完整性就是定义外键与主键之间的引用规则。
      

  2.   

    如果没有外键,我输入bname搜索表A 首先把bname转换成bid 然后bid和 anameid是有关系的(虽然我没加外键),那也可以搜索到结果的。一点bname不是b表的主键,无法标示b,比如bname可以重复,   1:bn   2:bn ,这样就无法确定  bn对应的id。欢迎加入java爱好者群:46918907欢迎加入java爱好者群:46918907欢迎加入java爱好者群:46918907
      

  3.   


    明白你的意思了  不过我的bname是唯一的  那我也明白我的问题了
      

  4.   

    这种情况有外键也无法确定bn对应的id
    像这种多个表之间的拥有外键的关系。。建议实际应用中还是不要建外键会给后续的操作带来麻烦以及开销只需要标识其唯一性也能达到外键的目的。。
      

  5.   

    简单的说,有外键的话一条SQL语句就可以搞定,没有的话,需要查两次,就像LZ自己说的,需要先做一次转换