数据库的 一对多、多对一、一对一、多对多 关系

数据库实体间有三种对应关系:一对一,一对多,多对多。
一对一关系示例:一个学生对应一个学生档案材料,或者每个人都有唯一的身份证编号。
一对多关系示例:一个学生只属于一个班,但是一个学院有多名学生。
多对多关系示例:一个学生可以选择多门课,一门课也有多名学生。
这三种关系在数据库中逻辑结构处理分析:
1.一对多关系处理:
我们以学生和班级之间的关系来说明一对多的关系处理方法。
假设现有基本表学生表(学号,姓名,……),班级表(班级号,备注信息,……)。


方法一:
新增一个关系表,用来表示学生与班级的属于关系,该关系表包含字段(学生号,班级号)。通过学生号与班级号的对应关系表示学生属于的班级。
方法二:
在学生表中新增字段(班级号),该字段作为学生表的外键与班级表中的班级号关联。每一个学生实体在班级号字段的值,表示该学生属于的班级。
小结:一般情况下,一对多关系采用方法二来处理。一对多的两个实体间,在“多”的实体表中新增一个字段,该字段是“一”实体表的主键。
2.多对多关系处理:

在多对多关系中,我们要新增加一个关系表。如在上面示例中,在学生表和课程表的基础上增加选课表来表示学生与课程之间的多对多关系。在选课表中,必须含有的属性有学生号和课程号。(学生号,课程号)这个属性集刚好也就是选课表的关键字。

时间: 2024-11-06 17:02:47

数据库的 一对多、多对一、一对一、多对多 关系的相关文章

jango 模型管理数据model,数据库外键主键与一对一,一对多,多对多关系

四.models.py 定义和管理模型: 4.1模型class的属性就映射与数据库的字段参数 继承models.Model class TestClass(models.Model): 4.2在数据库生成数据表: #django默认在makemigrations会为表对象创建主键id,id = models.AutoField(primary_key=True) 你也可以自定义一个主键对象: 4.2.1: 生成迁移文件python manage.py makemigrations 4.2.2执行

多对多 一对一 一对多 主从 关联 字典

 "订单"表中的主键.  "产品"表中的主键.  一个订单可以包含多种产品 ...   ... 且每种产品可以出现在多个订单上.   课程文本 在多对多关系中,一个表中的一个记录与第二个表中的多个记录相关,第二个表中的一个记录与第一个表中的多个记录相关. 这种类型的关系需要一个称为连接表的第三个表.连接表包含另两个表中的主键,并将它们用作其外键. 例如,"订单"表和"产品"表具有多对多关系.一个订单可以包含多种产品,每种产品可

数据库设计中一对一、多对一、多对多关系依据外键的实现条件及方法

作者:二歪求知iSk2y链接:https://www.jianshu.com/p/2b27c7ba0653来源:简书 下面以departments和staff_info表为例(为staff_info添加指向departments的外键) 一个表的字段作为外键的条件: 列值必须非空且唯一 测试例子如下: mysql> create table departments (dep_id int(4),dep_name varchar(11)); Query OK, 0 rows affected (0

Mybatis 一对一,一对多,多对一,多对多的理解

First (一对一) 首先我来说下一对一的理解,就是一个班主任只属于一个班级,一个班级也只能有一个班主任.好吧这就是对于一对一的理解 怎么来实现呢? 这里我介绍了两种方式: 一种是:使用嵌套结果映射来处理重复的联合结果的子集 另一种呢是:通过执行另外一个SQL映射语句来返回预期的复杂类型 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis

hibernate 关联关系(多对一、多对多、一对一)的配置

1:多对一 一般关系由多的一方来维护 多的一方需要有一方的字段,一的一方要有多的一方的set集合 一方的配置文件: ClientEntity为一的一方,OrderEntity为多的一方 <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hiberna

关联查询 一对多,多对一,多对多,自关联

关联查询: 一对一,一对多,多对一,多对多,自关联 仅供参考:(返回值是对象的是一对多,返回值是集合的是多对一) 一对一过于简单,只是两表连查 一对多: 职位entity: DAO .xml文件 给对象赋值使用collection标签 property:属性名 ofType:类型 测试: 多对一 entity: DAO: .xml文件 给集合赋值使用association property:属性名 javaType:类型 测试: 多对多 entity: DAO: .XML文件 测试 自关联 (说

Hibernate中用注解配置一对多双向关联和多对一单向关联

Hibernate中用注解配置一对多双向关联和多对一单向关联 Hibernate提供了Hibernate Annotations扩展包,使用注解完成映射.在Hibernate3.3之前,需单独下载注解开发包 配置持久化类 配置关联关系 下面我们先从多对一单向关联关系讲起,多对一单向关联就是在多的一方植入一的一方的主键作为外键,下面我们先进行初始配置, 在配置的过程中我们会遇到一个问题  就是无论用load还是get都不会出现延迟加载,那么我们应该如何设置为要延迟加载,这样做的好处是可以在用的时候

创建Oracle数据库、数据库名与实例名与SID之间的关系(图文详解)

目录 目录 软件环境 前言 安装Oracle监听程序 启动停止监听程序 创建数据库 数据库名db_name 数据库实例名instance_name 数据库名与实例名的关系 操作系统环境变量ORACLE_SID 软件环境 操作系统 RHEL 6.1 软件环境 Oracle10gr2 前言 在上一篇RHEL6.1 安装 Oracle10gr2 (图文.解析)中记录了如何成功的在RHEL6.1安装Oracle10gr2,但是在安装的过程中没有创建数据库,本篇主要记录了如果创建数据库和监听程序. 安装O

总结一下数据库的 一对多、多对一、一对一、多对多 关系

关联映射:一对多/多对一 存在最普遍的映射关系,简单来讲就如球员与球队的关系: 一对多:从球队角度来说一个球队拥有多个球员 即为一对多 多对一:从球员角度来说多个球员属于一个球队 即为多对一 数据表间一对多关系如下图: 关联映射:一对一 一对一关系就如球队与球队所在地址之间的关系,一支球队仅有一个地址,而一个地址区也仅有一支球队. 数据表间一对一关系的表现有两种,一种是外键关联,一种是主键关联.图示如下: 一对一外键关联: 一对一主键关联:要求两个表的主键必须完全一致,通过两个表的主键建立关联关