关系型数据库设计规则

news2024/11/26 2:49:57

目录

1.1 表、记录、字段

1.2 表的关联关系

1.2.1 一对一关联(one-to-one)

1.2.2 一对多关系(one-to-many) 

1.2.3 多对多(many-to-many)

1.2.4 自我引用(Self reference)


    关系型数据库的典型数据结构就是数据表,这些数据表的组成都是结构化的(Structured)。

    将数据放到表中,表再放到库中。

    一个数据库中可以有多个表,每个表都有一个名字,用来标识自己。表名具有唯一性。

    表具有一些特性,这些特性定义了数据在表中如何存储,类似Java和Python中“类”的设计。

1.1 表、记录、字段

    E-R(entity-relationship,实体-联系)模型中有三个主要概念是:实体集、属性、联系集。

    一个实体集(class)对应于数据库中的一个表(table),一个实体(instance)则对应于数据库表中的一行(row),也被称为一条记录(record)。一个属性(attribute)对应于数据库表中的一列(column),也称为一个字段(field)。

    ORM思想(Object Relational Mapping)体现:

数据库中的一个表 <----> Java或Python中的一个类。

表中的一条数据 <----> 类中的一个对象(或实体)。

表中的一个列 <----> 类中的一个字段、属性(field)。

1.2 表的关联关系

    表与表之间的数据记录有关系(relationship)。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。

    四种:一对一关联、一对多关联、多对多关联、自我引用。

1.2.1 一对一关联(one-to-one)

    在实际的开发中应用不多,因为一对一可以创建成一张表。

    举例: 

    设计学生表:学号、姓名、手机号码、班级、系别、身份证号码、家庭住址、机关、紧急联系人....

    拆分为两个表:两个表的记录是一一对应关系,比如共用一个学号。

    基础信息表(常用信息):学号、姓名、手机号码、班级、系别

    档案信息表(不常用信息):学号、身份证号码、家庭住址、籍贯、紧急联系人、...

    两种建表原则:

    外键唯一:主表的主键和从表的外键(唯一),形成主外键关系,外键唯一。

    外键是主键:主表的主键和从表的主键,形成主外键关系。

1.2.2 一对多关系(one-to-many) 

    常见实例场景:客户表和订单表,分类表和商品表,部门表和员工表。

    举例:

    员工表:编号、姓名、...、所属部门

    部门表:编号、名称、简介

    一对多建表原则:在从表(多方)创建一个字段,字段作为外键指向主表(一方)的主键

1.2.3 多对多(many-to-many)

    要表示多对多关系,必须创建第三个表,该表通常称为联接表,它将多对多关系划分为两个一对多关系。将这两个表的主键都插入到第三个表中。 

    举例:学生-课程

    学生信息表:一行代表一个学生的信息(学号、姓名、手机号码、班级、系别...)

    课程信息表:一行代表一个课程的信息(课程编号、授课老师、简介...) 

    选课信息表:一个学生可以选多门课,一门课可以被多个学生选择

    多对多关系建表原则:

    需要创建第三张表,中间表至少两个字段,这两个字段分别作为外键指向各自一方的主键。 

1.2.4 自我引用(Self reference)

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/771485.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第13讲:剖析 Trace 在 SkyWalking 中的落地实现方案(下)

TraceSegmentRef TraceSegment 中除了 Span 之外&#xff0c;还有另一个需要介绍的重要依赖 —— TraceSegmentRef&#xff0c;TraceSegment 通过 refs 集合记录父 TraceSegment 的信息&#xff0c;它的核心字段大概可以分为 3 类&#xff1a; 父 Span 信息traceSegmentId&am…

嵌入式工程师常用的软件工具推荐

前言&#xff1a;常言道&#xff1a;工欲善其事&#xff0c;必先利其器。作为一名合格的嵌入式工程师&#xff0c;日常可能需要接触和处理各种奇奇怪怪的问题&#xff0c;这时候一款高适配性的工具将会令工作效率大大提升。作者根据个人的实际使用情况与粉丝的客观感受&#xf…

在第二代SpringCloud中配置网关组件

我们接着上次的微服务的项目继续搭建网关组件: 搭建微服务项目 前提准备: 1.打开nacos服务注册中心,在浏览器通过这地址访问 http://10.48.185.7:8848/nacos/index.html 2.启动page和product的微服务 1.新建一个网关的项目 2.导入pom依赖 <!-- Spring Boot父启动器…

mysql中的Innodb_buffer_pool_reads和Innodb_buffer_pool_read_requests

Innodb_buffer_pool_reads和Innodb_buffer_pool_read_requests是什么&#xff1f; mysql服务器维护了很多状态变量&#xff08;status variables),这些变量提供了其相关操作的信息。 我们可以通过SHOW [GLOBAL | SESSION] STATUS 查看这些变量以及变量值。这些变量有很多&…

window 命令笔记

1.查看端口 输入“netstat -ano”并回车可以获得所有网络连接活动的列表&#xff0c;在表中&#xff0c;本地地址IP地址后方冒号之后的即是端口号&#xff1a; 如果想要查找特定的端口可以输入命令“netstat -aon|findstr “端口号””&#xff0c;例如“netstat -aon|findstr…

基于IPC-CFX的点对点通信C#

IPC-CFX有两种主要的通信方式&#xff0c;可以通过RabbitMQ发布和订阅&#xff0c;也可以通过request和response进行点对点的通信&#xff0c;本文主要讲的是点对点的通信方式。 在vscode里建立新的dotnet项目&#xff0c;可以通过终端输入dotnet new console来建立&#xff0c…

Spring Cloud 2022 发布,这几个组件要移除了!

继SpringBoot 3.0和SpringFramework 6.0之后&#xff0c;Spring Cloud 终于也推出了新版本——2022.0.0&#xff0c;官网把这个版本命名为Kilburn。 目前在Maven仓库中已经可以下载使用了&#xff0c;通过POM文件即可依赖到项目中&#xff1a; <dependencyManagement>&l…

阿里云声音复刻

阿里云声音复刻 个性化人声定制 阿里云个性化人声定制是智能语音交互产品自学习平台下的一部分 使用方式&#xff1a;https://help.aliyun.com/document_detail/456006.html 方式一&#xff1a;控制台界面定制使用方式 方式二&#xff1a;通过OpenAPI定制&#xff1a;在该页…

微服务保护——Sentinel【实战篇】

一、限流规则&#x1f349; 1.簇点链路&#x1f95d; 簇点链路&#xff1a;就是项目内的调用链路&#xff0c;链路中被监控的每个接口就是一个资源。默认情况下sentinel会监控SpringMVC的每一个端点&#xff08;Endpoint&#xff09;&#xff0c;因此SpringMVC的每一个端点&a…

CS162 11-12 调度与死锁

调度 overview 1.FCFS 可以利用好cache缓存&#xff0c;减少上下文切换。 2.很直观&#xff0c;贪心&#xff0c;可以减少平均的响应时间 3 4. 5.等待调度的时间是平均的 6.优先级翻转&#xff0c;和优先级捐赠 解决 cfs中的调度 死锁 四个必要不充分条件 银行家算法&…

基于 ChatGPT 的 helm 入门

1. 写在最前面 公司最近在推业务上云&#xff08;底层为 k8s 管理&#xff09;&#xff0c;平台侧为了简化业务侧部署的复杂度&#xff0c;基于 helm 、chart 等提供了一个发布平台。 发布平台的使用使业务侧在不了解 helm 、chart 等工具的时候&#xff0c;「只要点点」就可…

初识protobuf

Protobuf 全称Protocol Buffers&#xff08;协议缓冲区&#xff09;&#xff0c;是一种轻量级、高效的数据序列化格式&#xff0c;由Google开发。它被设计用于结构化数据的序列化、反序列化以及数据交换&#xff0c;常用于网络通信和数据存储等领域。 Protobuf使用简洁的消息描…

【实战技能】基于硬件垂直消隐的多缓冲技术在LVGL, emWin,GUIX和TouchGFX应用,含视频教程

原贴地址&#xff1a;https://www.armbbs.cn/forum.php?modviewthread&tid120114 这两天研究了下LVGL的持单缓冲&#xff0c;双缓冲和配合硬件消隐的双缓冲的实现&#xff08;已经分享V5&#xff0c;V6和V7开发板的程序模板&#xff09;&#xff0c;特别是这个整屏缓冲方…

DB-Engines排名公布 GBASE南大通用入围国产数据库TOP 3

什么是DB-Engines排名&#xff1f; DB-Engines排名是数据库领域的流行度榜单&#xff0c;它对全球范围内的419款数据库&#xff08;截至2023年7月&#xff09;进行排名&#xff0c;每月更新一次&#xff0c;排名越靠前&#xff0c;则表示越流行。在很多技术选型的场合&#xf…

Kubernetes——CKA证书

拿到CKA证书啦&#xff0c;打算近期再准备一下备考的学习笔记以及备考经验&#xff0c;有需要的朋友可以点赞加关注&#xff0c;我会持续更新&#xff0c;您的一个赞就能给我一份整理笔记的动力&#xff01;&#x1f92d;

掘金量化—Python SDK文档—5.API 介绍(1)

​ Python SDK文档 5.API 介绍 5.1基本函数 init - 初始化策略 初始化策略, 策略启动时自动执行。可以在这里初始化策略配置参数。 函数原型&#xff1a; init(context)参数&#xff1a; 参数名类型说明contextcontext上下文&#xff0c;全局变量可存储在这里 示例&…

vue2watch监听遇到的问题

1 vue 父组件里引入子组件 显示与隐藏是v-if控制时 父传入子的参数通过watch 监听请求接口时 watch 时而监听不到 请求接口的参数就不对 如图 父组件这么引入子组件v-show 和v-if 是有区别的 2 子组件通过watch 监听后 清空页面要展示的列表数据 重新从第一页加载数据&#x…

程序员如何准备技术面试

程序员如何准备技术面试 &#x1f607;博主简介&#xff1a;我是一名正在攻读研究生学位的人工智能专业学生&#xff0c;我可以为计算机、人工智能相关本科生和研究生提供排忧解惑的服务。如果您有任何问题或困惑&#xff0c;欢迎随时来交流哦&#xff01;&#x1f604; ✨座右…

Redis常见须知

介绍一下redis数据库 Redis 是一种基于内存的数据库&#xff0c;对数据的读写操作都是在内存中完成&#xff0c;因此读写速度非常快&#xff0c;常用于缓存&#xff0c;消息队列、分布式锁等场景。 Redis 提供了多种数据类型来支持不同的业务场景&#xff0c;比如 String(字符…

【后端面经-Java】JVM垃圾回收机制

【后端面经-Java】JVM垃圾回收机制 1. Where&#xff1a;回收哪里的东西&#xff1f;——JVM内存分配2. Which&#xff1a;内存对象中谁会被回收&#xff1f;——GC分代思想2.1 年轻代/老年代/永久代2.2 内存细分 3. When&#xff1a;什么时候回收垃圾&#xff1f;——GC触发条…