主外键一对多,多对多的理解

来源:未知 责任编辑:责任编辑 发表时间:2013-12-06 08:45 点击:

主外键的存在是依托两个实体之间的关系而存在的; 

比如班级与学生的关系: 
一个班级可以有多个学生,并且一个学生只能属于一个班级,这就是一对多的关系; 
那么设计数据库的时候就应该在学生表内存放班级的ID作为外键,为什么不在班级表内放学生呢? 
因为,你想一想班级表内如果放学生那么记录可能就是这样: 
1班ID 1班 xx同学id 
1班ID  1班 xx同学id 
.. 
这是不允许的,班级表内班级为主键,是唯一的不允许相同记录的; 
下面简单给你讲下大概建成的表结构 
--建班级表 
create table class( 
classid int primary key,--定义班级ID为主键 
classname varchar(15) 
--建学生表 
create table students( 
studentid int primary key,--定义学生ID为主键 
classid int ,--外键值,跟班级表classid 属性类型相同 
stuname varchar(20),--学生姓名 
---定义外键  www.2cto.com
foreign key(classid) references class(classid) --本表classid是基于class表classid的外键 
--------- 
如上定义了主外键后,两个表间的关系就是一对多的关系了,并且学生表内的classid必须依托班级表的classid存在,也就是说外键必须要主键存在的时候才能创建,例如: 
--在班级表为空的情况往学生表插入一条记录是不允许的: 
insert into students(studentid,classid,stuname)values(1,1,'小明') 
系统会抛出异常提示主键表班级表内班级ID不存在这样是不允许插入的; 
必须要先往班级表内插入一条记录: 
insert into class(classid,classname)values(1,'一班') 
后才能执行插入前面一条往学生表插入信息的语句.. 
 
 
 
作者 409304740
    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • Request.ServerVariables 参数大全
    • 执行全文索引时出现权限不足的解决方法
    • 导入excel文件处理流程节点的解决方案
    • 查看sql修改痕迹(SQL Change Tracking on Table)
    • App数据层设计及云存储使用指南
    • PostgreSQL启动过程中的那些事三:加载GUC参数
    • MongoDB安装为Windows服务方法与注意事项
    • Percolator与分布式事务思考(二)
    • 写给MongoDB开发者的50条建议Tip1
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1