日期:2014-05-20  浏览次数:20646 次

关于外键的一个疑问
今天在写一个业务
三个表,其中一个表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是有关系的(虽然我没加外键),那也可以搜索到结果的。

为什么要加外键呢?回答皆有分。

------解决方案--------------------
现在数据库所用的数据模型基本上是关系模型,关系数据库的完整性中有一项是参照的完整性。

设F是关系R的一个或一组属性,但不是关系R的键。如果F与关系S的主键相对应,则称F是关系R的外键,并称R为参照关系,S为被参照关系或目标关系。

参照完整性就是定义外键与主键之间的引用规则。
------解决方案--------------------
如果没有外键,我输入bname搜索表A 首先把bname转换成bid 然后bid和 anameid是有关系的(虽然我没加外键),那也可以搜索到结果的。

一点bname不是b表的主键,无法标示b,比如bname可以重复, 1:bn 2:bn ,这样就无法确定 bn对应的id。

欢迎加入java爱好者群:46918907

欢迎加入java爱好者群:46918907

欢迎加入java爱好者群:46918907
------解决方案--------------------
探讨
如果没有外键,我输入bname搜索表A 首先把bname转换成bid 然后bid和 anameid是有关系的(虽然我没加外键),那也可以搜索到结果的。

一点bname不是b表的主键,无法标示b,比如bname可以重复, 1:bn 2:bn ,这样就无法确定 bn对应的id。

欢迎加入java爱好者群:46918907

欢迎加入java爱好者群:46918907

欢迎加入ja……

------解决方案--------------------
不用外键的路过
------解决方案--------------------
简单的说,有外键的话一条SQL语句就可以搞定,没有的话,需要查两次,就像LZ自己说的,需要先做一次转换
------解决方案--------------------
外键约束建议使用程序控制,而不是靠数据库控制,这样将带来很差的性能。