主键和外键关联后好在哪?

来源:百度知道 编辑:UC知道 时间:2024/06/25 00:12:28
书上有这样一个从事贸易,书籍表(书籍编号,书籍名称,作者编号),说里面的“书籍作者”太多重复应单分一个作者表(作者编号,作者名称),然后说用书籍表的(作者编号)作外键与作者表(作者编号)作主键连接,说要找(作者名称)就可以找到,可是我用select 作者名称 from 书籍表 都找不出来,关系到底是怎么关系的,是用户体会不到的吗?举个主外键关联后,方便编程和查询的实际例子?

书籍表里只有作者编号,也就是书籍是和作者编号关联的,作者编号和作者名称又是关联的。也就是书籍通过作者编号,和作者名称进行关联。

你的SELECT为什么找不出来?因为书籍表里没有作者名称这一列。你要找作者名称就应该在作者表里找。
列出所有作者 select 作者名称 from 作者表
如果要查找某本书的作者名称 就应该先找出作者编号,再通过作者编号找到作者名称。select 作者名称 from 作者表 where 作者编号=‘’
作者编号又是这么确定的呢?select 作者编号 from 书籍表 where 书籍编号=''
然后把它们结合起来就好了 select 作者名称 from 作者表 where 作者编号 in
(select 作者编号 from 书籍表 where 书籍编号=??)

其实你这个例子很能说明问题
假如是下边这个样子建表
书籍表 (书籍编号,书籍名称,作者名称)
则内容变成

书籍编号 书籍名称 作者名称
00001 笑傲江湖 金庸
00002 江湖 甲
00003 天下 甲

假设这里两个甲是重名的人,
再有 作者表(作者名称 年龄)

作者名称 年龄
金庸 80
甲 45
甲 66
这样查
书籍名称为江湖的
作者的年龄
会出现2条:45,66
明显不对
如果用外键形式建则杜绝了这种问题

书籍表
书籍编号 书籍名称 作者名称编号
00001 笑傲江湖 1
00002 江湖 2
00003 天下 3

作者表
作者名称 年龄 作者名称编号
金庸 80 1
甲 45 2
甲 66 3

用作者名称编号链接两个表的数据则
不会出现上述多条的问题
另外,正确的检索文应该是
<