主外键的存在是依托两个实体之间的关系而存在的;
比如班级与学生的关系:
一个班级可以有多个学生,并且一个学生只能属于一个班级,这就是一对多的关系;
那么设计数据库的时候就应该在学生表内存放班级的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),--学生姓名
---定义外键
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,'一班')
后才能执行插入前面一条往学生表插入信息的语句..
分享到:
相关推荐
hibernate基于主外键的一对多/多对一关联
Hibernate期末作业一对多(主外键)
父表中的外键,是子表中的主键。在父表中的外键,可以出现多次。主键是不能有重复的。
第一范式: 对于表中的每一行,必须且仅仅有唯一的行值.在一行中的每一列仅有唯一的值并且具有原子性. 第二范式: 第二范式要求非主键列是主键的子集,非主键列活动必须完全依赖整个...主外键关联意味着一对多的关系.
第七章、复杂查询(上):多表连接技术 7.1 简单查询的解析方法: 全表扫描:指针从第一条记录开始,依次逐行处理,直到最后一条记录结束;...2)一对多关系 两表通过定义主外键约束,符合第三范式标准的对应关系。
* @OneToMany 设置一对多关联。cascade属性指定关联级别,参考@OneToOne中的说明。fetch指定是否延迟加载,值为FetchType.LAZY表示延迟,为FetchType.EAGER表示立即加载 * 方法一 使用这种配置,在为“一端”添加“多...
首先我定义了两个模型,一个是老师模型,一个是学生模型,一个老师对应多个学生,这个算是一个一对多的类型(如下图所示) 那么如果我们要想查询一个老师对应的学生有哪些,该如何操作呢? 首先我们先查询到老师...
这里以用户表和用户组表为例,这是一个典型的多对一关系,多个用户对应于一个用户组。 首先创建用户组表: create table t_group( id int not null, name varchar(30), primary key(id) ); ...
指向主表的外键名:主表表名+下划线+主表主键列名,指向从表的外键名:主表所对应实体的属性名+下划线+从表主键列名,指向从表的外键定义为唯一约束,用来表示一对多的关联关系。 @Entity public class Trainer{ @...
单向的一对多的关系,在进行关联关系的操作时,会执行不必要的update语句,所以,一般情况下,我们不会做单向一对多的映射。 inverse="true":让其中一方放弃对关联关系的维护 一般在做双向多对一(一对多)关联关系...
大学计算机基础考试题及答案
原始单据与实体之间的关系 可以是一对一、一对多、多对多的关系。在一般情况下,它们是一对一的关系:即 一张原始单据对应且只对应一个实体。在特殊情况下,它们可能是一对多或多对一的关 系,即一张原始单证对应多...
一对多 多对多 一对一 多对多 (可选)多对一和多对一和一对多 最少的信息。 该数据库最多有5行数据。 它有一些空值 所有表的前缀均为“ Table ”。 所有主键(PK)均为int类型,并且具有后缀“ PK ” 其中一些是...
一对多 的情况可以如下: 有一个人员信息表info,里面包括一个外键:email;这个字段里存的是邮箱表emailBox里的主键:id;因为一个人可以对应多个邮箱,但一个邮箱只能属于一个人(他自己要共用木有办法) 数据库表设计全文...
可以是一对一、一对多、多对多的关系。在一般情况下,它们是一对一的关系:即一张原始单据对应且只对应一个实体。在特殊情况下,它们可能是一对多或多对一的关系,即一张原始单证对应多个实体,或多张原始单证...
就是设计数据库模型,包括面向对象模型、业务流程模型、概念数据模型、物理数据模型等,最常用的应该是PDM(物理数据模型)了,在PDM中设计数据库(包括表、试图、触发器,到表的主外键、索引等等都涉及到)然后配置...
一对多块表操作的的三种方式 增加一对多数据示例 初识Ajax Ajax内容基本整理 编辑一对多示例 创建多对多以及增加示例 本节内容梳理 本周作业 第21周 今日知识点概要 上节内容回顾以及URL的补充 视图获取用户请求...
这种策略支持双向的一对多关联,但不支持 IDENTIFY 生成器策略,因为ID必须在多个表间共享。一旦使用就不能使用AUTO和IDENTIFY生成器。 每个类层次结构一张表 @Entity @Inheritance(strategy=InheritanceType....
传统的数据库设计是如何...关系型数据库设计时,实体和实体之间一对多的关系时,此时需要将数据拆分为多张表,然后通过主外键进行联系,如果是实体和实体之间是多对多关系,此时则需要额外建立第三张表。MongoDB 则有所
就是设计数据库模型,包括面向对象模型、业务流程模型、概念数据模型、物理数据模型等,最常用的应该是PDM(物理数据模型)了,在PDM中设计数据库(包括表、试图、触发器,到表的主外键、索引等等都涉及到)然后配置...