SQL Server数据库外键一般在什么地方用?为什么大型网站的SQL Server数据库有多个表,竟没有一个外键? sql server数据库中主键和外键是怎么联系的

作者&投稿:符黄 (若有异议请与网页底部的电邮联系)
主键和外键是在说明数据表之间的关系的时候,为了能够明确指出两个表中对应栏位的关系时需要的两个名词。也就是说,供实体关系角度来讲,具有一对多的关系,那么就存在一对主键外键。你所看到的设置好的主键和外键,一般是为了约束,理论上具有一对多关系的表应该建立约束关系,但是大部分人都是不建关系的,都是在程序中进行限制。这样做有可能是为了数据维护的时候比较灵活,在做大数据量修复的时候不需要考虑到约束的限制。也有可能是不想把数据库结构描述的很清楚,这样就算别人得到了数据库,也不容易分析出实体关系,增加别人模仿时的难度(呵呵,我是这样想的,也许不对啊)。

SQL Server 外键约束的例子
http://hi.baidu.com/wangzhiqing999/blog/item/969f70fa84e2873e5d600821.html

一般用于确保一定的数据的正确性,避免产生垃圾数据.
例如 有 班级表 / 学生表.
学生表上面,有个班级ID。
假如有3个班级, ID 为 1,2,3。

如果没有外键的话,你新增学生的时候, 可以新增 班级ID 为 3,4,5 ,-1,-2,-3 之类的,不存在的班级的学生。
如果有外键的话,那么,新增学生的时候,如果 班级ID, 在班级表那里没有的话,是不允许你插入数据的。

至于大型网站的SQL Server数据库有多个表,竟没有一个外键?
原因可能有下面这几个:
建立了外键的话:
当删除表/数据的时候。 必须按照, 先删除子表的数据,后删除主表的数据。
当数据库数据丢失的时候, 必须先恢复主表,后恢复子表。
这个顺序,很麻烦。
而且,对于大型网站来说, 理论上,业务逻辑写的比较严谨的,测试是比较充分的。
一般不太会发生 上面那种, 插入没有主节点的 子节点的数据。
换句话说,那些检查 父子关系的逻辑, 写在网站的服务里面了,没有写在数据库级别上面。

有没有外键, 多表查询的写法都是一样的啊
例如前面的 班级 / 学生表
无论有没有外键
班级表 和 学生表之间, 都要写 (班级.班级ID = 学生.班级ID) 这样的条件的。

QL Server2000/2005,Oracle等等,一样是一个数据库系统,专门用来创建管理数据库。而MySQL是一种免费的数据库系统(当然限于一定版本)。
2.而SQL是一种结构化查询语言,基本上你列出的数据库系统都能用这个语言进行查询,更新等操作(因为它已经形成了一个标准),只是个数据库系统增加了自定义语句。
3.像你电脑上装的数据库系统作,为DW网页制作且用于ASP建议使用Microsoft SQL Server的系统(要下载百度一下),毕竟都是Microsoft的产品兼容性好,不推荐MySQL(基本上没人用在ASP中使用它);Access也可以,它适合小型的网站建设,访问量有限,速度慢,作为你的测试用还可以。

外键(FK): 是用于建立和加强两个表数据之间的链接的一列或多列。通过将保存表中主键值的一列或多列添加到另一个表中,可创建两个表之间的链接。这个列就成为第二个表的外键。
例如:成绩表中的学号不能做成绩表的主键(因为一个学生可以有多行成绩数据),但每行的学号和学生表中的学号相对应,并且学生表中的学号是学生表的主键,则称成绩表中的学号是学生表的外键 。(典型的一对多关系)

表的多少不能决定有没有外键。外键和表之间的关键有关。你好好理解下外键的定义。

数据库中(本人用sql server)表的内链接和外链接各是在什么情况下用哪一个?遇到一个题目该如何选择?~

inner join 用得最多,多个表联合查询
left outer join 少用,以左边表为主查询
right outer join 少用,以右边表为主查询

你百度一下:内连接,左外连接,右外连接。

主键:唯一标识一条记录,不能有重复的,不允许为空;外键:表的外键是另一表的主键, 外键可以有重复的, 可以是空值。
主键的作用是用来保证数据完整性,主键只能有一个。比如,一条记录包括身份正号,姓名,年龄。身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。
外键的作用是用来和其他表建立联系用的,一个表可以有多个外键。比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。