A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄友 黑马帝   /  2011-12-7 00:50  /  2820 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

以前在想这个问题时,想的头疼,什么主键外键啊,越想越乱,现在问题又来了,表之间的关系,我做项目都没弄表之间的关系,不知道它有什么用处。

评分

参与人数 1技术分 +2 收起 理由
李荣壮 + 2

查看全部评分

5 个回复

倒序浏览
主键主要是标识一个表(如A)中的一行数据,所以主键列肯定不会重复,外键其实往往就是另一个表(如B)的主键,A表与B表的关系就靠外键啦。你在访问A表时,通过相应的的外键就可以访问到B表相应的数据。

评分

参与人数 1技术分 +2 收起 理由
李荣壮 + 2

查看全部评分

回复 使用道具 举报
好像杨老大也说过,现在做项目,都不怎么用外键约束了,
感觉外键约束挺麻烦的,约束多的话,要删除某一张表的数据,得看N多个表。

评分

参与人数 1技术分 +1 收起 理由
李荣壮 + 1

查看全部评分

回复 使用道具 举报
主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。
外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。

评分

参与人数 1技术分 +2 收起 理由
李荣壮 + 2

查看全部评分

回复 使用道具 举报
刘波 黑马帝 2011-12-19 14:47:08
报纸
如果你实在对外键有些迷糊的话,建议可不再数据库表中设立外键
用Join 表连接 来建立表之间的连接关系
例如:
   有客户表(T_Customers)和订单表(T_Orders)两个表  客户表字段为:Id,Name,Age订单表字段为:Id,BillNo,CustomerId,订单表通过CustomerId关联客户表

Select c.BillNo, o.Name, o,Age
From T_Customers as o join T_Orders as c on c.CustomerId=o.Id
Where c.Age>15  年龄大于15的订单号 客服姓名 年龄

Where c.Age> (select avg(Age) from T_Customers)
年龄大于平均年龄

评分

参与人数 1技术分 +2 收起 理由
李荣壮 + 2

查看全部评分

回复 使用道具 举报
是的,其实前边有几个同学已经说出来了!

目前来说,对于开发项目,对数据库中的表设外键的弊绝对是大于利的,因为外键的作用无非也就是表与表之间的联系,这也在设置外键的时候无形的使表与表之间产生了很多不必要的关联,但是它确实建立了一种很死的外部联系,这对于我们以后操作数据表非常的不方便,举个例子,你需要只删除其中一个A表中的数据,但是它正好就是和另外一个表B有着外键关联,这样,你单独删除A表中的数据就会出错,但实际情况确实是只需要删除A表中的数据,对B表不需要操作!这时候,就非常麻烦了!其实上边同学也说了,平时外键能实现的功能,我们用某些SQL语句也能实现的,譬如JOIN ON之类的。

而主键就不一样了,它就像一个人的身份证一样,尽管每个人可以有多张证,比如银行证(信用卡)、学生证,但是大众的,只有身份证能明确的证明你的身份。所以每个表必须得有自己的主键,否则这个表将失去创建的意义!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马