根据E-R图设计数据库表

2023-10-31

在这里插入图片描述
上图是一个E-R图,一共有三个实体:司机、车辆、车队。并且这几个实体之间互相具有一定的联系。
我们首先把所有实体的表写出来。

数据类型的选择请参考文章:https://blog.csdn.net/qq_61659383/article/details/124154332

1. 设计实体表

1.1 司机表

字段名 中文描述 类型 长度 是否可以为空 是否作为主键
id 司机编号 int 10
name 姓名 varchar 10
telephone 电话 varchar 20

我们分析一下这个表怎么出来的:

  • 司机编号:类似这样的比如 学号、身份证号、图书编号等唯一ID,都可以直接以id命名,并且一般都是这张表的主键,而如果没有特殊需求,编号都是整数,所以我们选择 int 类型。int后面的长度根据需求填写,不离谱就行。
  • 姓名:首先取名字,姓名的英文翻译是 name。再看类型,名字肯定是一个字符串,我们选取字符串中用的最广的类型,varchar,然后给他取一个最大长度 10
  • 电话号:电话号英文翻译为telephone number,如果一定要起这个名字可以起telephone_number,但是有点长了,在取名不冲突的情况下(比如没有电话站telephone_station这样的字段出现),可以简化,所以我们最终取 telephone(甚至可以是 tel)。然后是选类型,我们都知道电话号码是纯数字,所以直接用数字可不可以,也是可以的,但是有溢出的风险(比如超过int能存储的最大值),而且我们存这个电话号码的目的也不是为了用于计算数字什么的,只是单纯的存一下。用字符串存也没有什么区别,这时候用字符串存最优,所以我们选择 varchar,长度留一个20(就和c语言里开数组一样,往大开一点点不是坏处)

1.2 车辆表

字段名 中文描述 类型 长度 是否可以为空 是否作为主键
id 车牌照号 varchar 20
factory 厂家 varchar 255
manufacture_date 出厂日期 datetime *

我们分析一下这个表怎么出来的:

  • 车牌照号:同理,只不过车牌号还有字母,所以类型只能是字符串了,然后长度根据实际情况的基础上往大取一下就行。
  • 厂家:看到这个属性要警惕一下,因为E-R图可能不是你自己经手的,你不能保证E-R图是完全正确的。我们需要先去实体表里瞅一眼,有没有厂家这个实体,来判断这个属性算不算一个外键。好的,我们看过了,没有。看来这个仅仅就是一个属性而已,我们先去百度翻译找一个对应的 英文名:factory,ok就这个了。类型自然是字符串,varchar,长度取大一点。
  • 出厂日期:百度翻译“出厂日期”,manufacture_date,日期类型一律datetime。

1.3 车队表

字段名 中文描述 类型 长度 是否可以为空 是否作为主键
id 车队号 int 20
name 车队名 varchar 255
  • 车队号:同理,直接取id,类型取int
  • 车队名:同理,取name,类型取varchar,长度长一点稍微

2. 设计关系表

观察E-R图,我们可以梳理下面的几条关系:

  • 车辆 <组成> 车队(1:n)
  • 车队 <聘用> 司机 ,并有 工资、聘期(1:n)
  • 司机 <使用> 车辆,并有 公里数、日期(n:m)

2.1 车辆-车队 组成

从E-R图上可以看出,车辆-车队是1:n关系。
一对多是什么概念呢?意味着一辆车仅能参与一个车队,这样一对多才可行。
我们可以直接在 车辆的表上加一个 外键“车队编号”,来解决这个问题。

车辆表(加了外键)

字段名 中文描述 类型 长度 是否可以为空 是否作为主键
id 车牌照号 varchar 20
factory 厂家 varchar 255
manufacture_date 出厂日期 datetime *
team_id 外键,关联车队表 int 20

但是有些时候,加外键很不优雅,尤其是当关系特别多的时候(或者关系上还有属性),这时候我们也可以考虑建第三张表来解决。

车辆-车队组成 表

字段名 中文描述 类型 长度 是否可以为空 是否作为主键
car_id 车牌照号 varchar 20
team_id 车队号 id 20

这样,我们就不需要再新建外键来解决了。

如果1:n关系上还附有其余的属性,那么还是选用第三张表比较好

2.2 车辆-司机 使用表

首先把关联两个表的外键放上去,然后再补充一下关系上的属性。

字段名 中文描述 类型 长度 是否可以为空 是否作为主键
car_id 车牌照号 varchar 20
driver_id 司机编号 id 20
kilo_miles 公里数 float 20
date 日期 datetime *

2.3 司机-车队 聘用表

司机和车队是1:n,但是由于在聘用的关系上,它还增加了额外的属性(工资、聘期),所以我们采用建立第三张表的方式解决。

字段名 中文描述 类型 长度 是否可以为空 是否作为主键
team_id 车队号 id 20
driver_id 司机编号 id 20
salary 工资 float 20
date 聘期 datetime *
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据E-R图设计数据库表 的相关文章

  • 期货量化交易程序CTP入门指南 一

    周末综合征 周末爬山 跑步导致周一上班困的啥都不想做 正好趁这个时间写一下前两周做的一个期货网格化工具 算是给后面要入门的兄弟尽点微薄之力 虽然网上的资料已经足够多 我本对期货一无所知 仅知道 期货 二字而已 但受朋友之托开发一款网格化工具

随机推荐

  • 快速使用C ++保护或取消保护Word文档

    数字文档的保护一直是热门话题 就Word文档而言 MS Word提供了多种内容保护功能 这些功能限制了用户对文档的访问 您可以使用密码保护文档并应用所需的限制 以避免未经授权的访问 因此 本文将介绍如何在C 应用程序中自动执行Word文档保
  • python作业合集(三)

    作业1 猜数字游戏 电脑随机一个范围内的数 用户输入数据判断 如果数大了 提供 数大了 成功之后 加上用户是否继续功能 作业2 猜拳游戏 石头 剪刀 布的游戏 作业3
  • git设置编码

    git config global core quotepath false 显示 status 编 git config global gui encoding utf 8 图形界面编码 git config global i18n co
  • 你好,五月

    五月算是上大学以来最忙碌的一个月 因为所有事碰巧都堆到这个月了 当然也是因为这个月的存在 让我成长了许多也让我认识到原来自己可以做这么多事 人力项目 柳暗花明 人力资源项目 五一七天时间我们全天基本上是在423度过的 每天都一起在研究如何实
  • macOS查看文件路径

    当在mac系统中需要输入文件路径 快速找到文件路径 有以下2个步骤 1 点击Finder查看全部文件 shift command c 进入到磁盘界面找到需要放置的文件夹 2 打开终端输入命令 defaults write com apple
  • Ubuntu 安装 Wireshark

    Ubuntu 安装 Wireshark 概述 Wireshark 是一款图形化的网络协议分析工具 它允许你交互式地浏览实时网络或以前保存的捕获文件中的数据包数据 Wireshark 的本地捕获文件格式是 pcapng 格式 或者是 pcap
  • jsunix时间戳转换成时间

    jsunix时间戳转换成时间 js实现unix时间戳转换代码教程如下 输入一个时间 实现结果 转换成时间戳 js实现代码如下 act 鏃堕棿鎴宠浆鎹 version 1 1 author youngxj date 2018 07 01 ur
  • 训练---递归与递推

    文章目录 一 递归实现指数型枚举 递归 二 递归实现排列型枚举 递归 三 简单斐波那契 四 费解的开关 五 递归实现组合型枚举 六 带分数 七 飞行员兄弟 七 翻硬币 一 递归实现指数型枚举 递归 任意门 include
  • C语言输入输出函数printf与scanf的用法格式

    转自 微点阅读 https www weidianyuedu com content 4617732110906 html c语言输入输出函数printf与scanf的用法格式 printf 函数用来向标准输出设备 屏幕 写数据 scanf
  • 关于nginx服务关闭之后端口占用kill不掉的问题

    这里写自定义目录标题 首先介绍下当前环境 首先介绍下当前环境 nginx版本 1 21 6 linux版本 CentOS8 使用命令行 ps ef grep nginx 查询出当前 nginx进程 使用kill 9 进程号 来进行强制关闭n
  • Activiti和tk.mybatis的坑

    近期开发关于工作流的项目 遇到一个很坑的问题 activiti和tk mybatis居然会有冲突 先看异常 报错的原因大概就算这句话 Parameter 1 of method springProcessEngineConfiguratio
  • KubeVela 再升级:交付管理一体化的云原生应用平台

    11月3日 2022 杭州 云栖大会上 阿里云智能云原生应用平台总经理丁宇宣布 KubeVela 面向四大核心方向能力升级 打造交付管理一体化的云原生应用平台 本次升级是 KubeVela 从应用交付到应用管理不断量变形成的一次质变 同时也
  • 用python读写.mat文件——使用scipy库的scipy.io和h5py库

    python 中的scipy库和h5py库 1 读 mat文件 1 1 用scipy io读取 在用python处理matlab的mat文件时 发现数据量较小的文件可以直接通过scipy库的scipy io读取 import scipy i
  • linux 安装 yum etcd,安装etcd - Go语言中文网 - Golang中文社区

    etcd是一个golang编写的分布式 高可用的一致性键值存储系统 用于提供可靠的分布式键值 key value 存储 配置共享和服务发现等功能 etcd可以用于存储关键数据和实现分布式调度 在现代化的集群运行中能够起到关键性的作用 etc
  • VSCode官网无法下载

    因为不是国内的服务器 所以有可能无法下载或者下载失败 将下载地址https stable之间的部分更改为vscode cdn azure cn 重新复制地址下载就可以
  • 语音信号加噪频域分析与滤波处理(MATLAB GUI)

    语音信号加噪频域分析与滤波处理 MATLAB GUI 文章目录 语音信号加噪频域分析与滤波处理 MATLAB GUI GUI功能界面如图所示 部分代码展示 IIR高通滤波结果 IIR带通滤波结果 联系方式 email Jaceshuai j
  • python重复执行_python scrapy重复执行实现代码详解

    这篇文章主要介绍了python scrapy重复执行实现代码详解 文中通过示例代码介绍的非常详细 对大家的学习或者工作具有一定的参考学习价值 需要的朋友可以参考下 Scrapy是一个为了爬取网站数据 提取结构性数据而编写的应用框架 我们只需
  • windows使用rdp远程连接deepin

    deepin版本是截止目前最新的15 11 可以安装xrdp和x11vnc来使用windows可以远程连接 首先开启ssh sudo apt get install openssh server 开启服务 sudo systemctl st
  • 云计算 第七章 云安全(3)概述 云计算面临的安全问题 云安全问题的深层原因 云安全关键技术 云计算信息安全的国内外标准化

    关注公众号凡花花的小窝 收获更多的考研计算机专业编程相关的资料 加密与解密 目前 云服务提供商般采用密码学中的技 术来保证数据安全 常用技术之一就是对数招进1加8和联名密码技术不仅服务于信息的加密和解密 也是身份认证 访问控制和数排签名等多
  • 根据E-R图设计数据库表

    上图是一个E R图 一共有三个实体 司机 车辆 车队 并且这几个实体之间互相具有一定的联系 我们首先把所有实体的表写出来 数据类型的选择请参考文章 https blog csdn net qq 61659383 article detail