热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

mysql设计表之间的联系_关系型数据库表与表之间的设计

关系型数据库表与表之间一般存在三种关系:一对一多对一(如:老师与学院)多对多(如:老师与学生)下面分别就三种关系讲解数据库相关设计的思路和

关系型数据库表与表之间一般存在三种关系:

一对一

多对一(如:老师与学院)

多对多(如:老师与学生)

下面分别就三种关系讲解数据库相关设计的思路和思考过程:

# 一对一关系(少见)

建立一个父表和一个子表,最好将数据量多的作为子表,内有自己 id 号作为主键,并有父表的主键(id)做为外键。

# 多对一关系

各建立两张表,多端表指向另一张表(即多指向一),同时多端表中加上外键约束。

例 1:每个教师只担任一门课的教学,一门课由若干教师任教。“教师”有属性:职工号,教师姓名,职称,“课程”有属性:课程号、课程名。

解析:由题目可知,需要创建两张表:教师表和课程表,其关系为多对一,则教师表为子表,课程表为父表,教师表指向课程表(多指向一)。

E-R 图如下(使用 PowerDesigner15.1 绘制):

6b9d84a2345915d5216bc4c456356601.png

建表语句如下:

a5f7da80110668f5f371eb138061df74.png

# 多对多关系

方法一:选择一张表作为父表,另一张作为子表,在子表中添加外键。建表语句与例 1 中相似,就不做过多赘述。

方法二:在建立两张基本信息表的同时,建立一个中间表,这个中间表通过两个 id 映射作为一个多列索引来表达两个表的数据关系。

例 2:一个产品由多种零件组成,一种零件也可装配出多种产品。产品有产品号和价格,零件有零件号、重量和价格。

方法二:需要创建三张表:零件表、产品表和关系表。

E-R 图如下:

4bcc26a9124f8a531d1a897d727716f0.png

建表语句如下:

fb9f52bbf207badaf8e75a24357d26bb.png

# 总结

表中行的信息是通过 id(主键)来标识的,多表的关系总是通过建立一个各个表的 id 映射(外键)来表达,这个映射表有时比较简单,就把它包含到其要映射的一个表中(如多对一关系表);而比较复杂时就需要单独提取出来(如多对多关系表),当然也可以不提取出来,但是那样设计会产生很多冗余空间,占用我们硬盘。把表分开节约空间,把表合并节约时间,具体表该怎么设计最终还是要看需求。



推荐阅读
  • Navicat Premium 15 安装指南及数据库连接配置
    本文详细介绍 Navicat Premium 15 的安装步骤及其对多种数据库(如 MySQL 和 Oracle)的支持,帮助用户顺利完成软件的安装与激活。 ... [详细]
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 本文详细介绍了如何通过多种编程语言(如PHP、JSP)实现网站与MySQL数据库的连接,包括创建数据库、表的基本操作,以及数据的读取和写入方法。 ... [详细]
  • Windows 系统下 MySQL 8.0.11 的安装与配置
    本文详细介绍了在 Windows 操作系统中安装和配置 MySQL 8.0.11 的步骤,包括环境准备、安装过程以及后续配置,帮助用户顺利完成数据库的部署。 ... [详细]
  • 本文详细介绍如何下载并安装MySQL数据库(5.7.10版本),以及配置Navicat管理工具(免费版)。通过本指南,您将了解从下载到安装的完整流程,并掌握基本的数据库管理技能。 ... [详细]
  • MySQL中枚举类型的所有可能值获取方法
    本文介绍了一种在MySQL数据库中查询枚举(ENUM)类型字段所有可能取值的方法,帮助开发者更好地理解和利用这一数据类型。 ... [详细]
  • 国内BI工具迎战国际巨头Tableau,稳步崛起
    尽管商业智能(BI)工具在中国的普及程度尚不及国际市场,但近年来,随着本土企业的持续创新和市场推广,国内主流BI工具正逐渐崭露头角。面对国际品牌如Tableau的强大竞争,国内BI工具通过不断优化产品和技术,赢得了越来越多用户的认可。 ... [详细]
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • 本文详细介绍了如何使用libpq库与PostgreSQL后端建立连接。通过探讨PQconnectdb()函数的工作原理及其在实际应用中的使用方法,帮助读者理解并掌握建立高效、稳定的数据库连接的关键步骤。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
author-avatar
媛涞汝茨
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有