上图是一个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 *

根据E-R图设计数据库表相关推荐

  1. 设计数据库表时,你真的会选数据类型吗

    转载自  设计数据库表时,你真的会选数据类型吗 关系型数据库,是开发人员最常接触的持久化存储之一了,使用关系型数据库有很多好处,比如支持通过事务处理保持数据的一致性.数据更新的开销很小.可以进行Joi ...

  2. powerdesign java,PowerDesigner设计数据库表

    1.说明 使用PowerDesigner设计数据库表, 然后将表设计导出为Word文档, 以及MySQL数据库对应的DDL刷库脚本. 2.创建模型 首先创建概念数据模型: File -> New ...

  3. 设计数据库表时数据类型的选择

    设计数据库表时数据类型的选择 1. 整数类型 整数类型有:tinyint.smallint.mediumint.int.bigint,分别使用 8.16.24.32.64 位存储空间. 它们可以存储的 ...

  4. 数据库关系建模(ER图设计关系表)

    目录 一.概述 二.基本概念 1. 关系(relation) 2. 列(column) 3. 行(row) 4. 关系表 VS 一般的表 5. 主码(主键primary key) 6. 实体完整性约束 ...

  5. 干掉 powerdesigner,设计数据库表用它就够了

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 点击" 程序员内点事 "关注,选择&q ...

  6. 一篇文章告诉你如何设计数据库表

    0.三大范式及反范式 ◆ 第一范式(1NF):强调的是列的原子性,即列不能够再分成其他几列.  ◆ 第二范式(2NF):首先是 1NF,另外包含两部分内容,一是表必须有一个主键:二是没有包含在主键中的 ...

  7. Access把每一天的数据累加_如何设计 QQ、微信等第三方账号登陆 ?以及设计数据库表!...

    来源:http://suo.im/5SBVka 多账户的统一登录 名称解释 这里的多账户区别于系统级别的,我们讲的多账户系统是指,在我们互联网应用当中,我们的应用会使用多个第三方账号进行登录,比如现在 ...

  8. token 微信access 过期_如何设计 QQ、微信等第三方账号登陆 ?以及设计数据库表!...

    来源:http://suo.im/5SBVka 多账户的统一登录 名称解释 这里的多账户区别于系统级别的,我们讲的多账户系统是指,在我们互联网应用当中,我们的应用会使用多个第三方账号进行登录,比如现在 ...

  9. oracle数据库纵表设计,oracle 数据库设计-数据库表设计

    在数据库设计中,我的工作中经常会分析怎样商业逻辑中的表格如何设计.再设计表的关系之前 需要先了解关系型数据库特点 1关系型数据库,是指采用了关系模型来组织数据的数据库: 2.关系型数据库的最大特点就是 ...

最新文章

  1. iOS SwiftUI篇-4 注解@State、@Binding、@ObservedObject、@EnvironmentObject、@Environment
  2. python守护进程_Python实现守护进程
  3. SAP UI5 初学者教程之十四 - 嵌入视图的使用方式试读版
  4. g4e基础篇#3 Git安装与配置
  5. 300GB*6 SCSI RAID5 LINUX服务器数据恢复手记
  6. FAQ宝典之Rancher Server
  7. 模型相关:SolidWorks创建Cube模型,在3DMax中给不同面添加不同颜色,导出自带纹理的FBX至Unity
  8. 音视频开发著作《Android音视频开发》终于发售了,先来一波签名送书福利!
  9. python ctp接口_GitHub - keli/ctp-python: 穿透式监管版本CTP接口的Python封装
  10. Java|二叉树基础详解
  11. 双舵轮AGV轨迹跟踪Pure Pursuit算法模型分析、python代码实现
  12. 软件工程-读《构建之法》读后感
  13. 三阶魔方7步还原法-一共只需记6个公式
  14. 云计算设计模式翻译(五):Compute Resource Consolidation Pattern
  15. 善网ESG报告(第十期)
  16. 7-2 判断是否含敏感词汇
  17. 玩转百度即用API(5)——空气质量指数查询
  18. 点击按钮返回数组 ages 中所有元素都大于输入框指定数值的元素和 $set()
  19. Unity3d Android SDK接入解析(三)接入Android Library的理解(爱贝云支付为例)
  20. Keil5中No Cortex-M4 SW Device Found 解决方法

热门文章

  1. 简单人物画像_简单的素描画人物图片
  2. 【转】每个程序员应该阅读的10本经典书籍
  3. win7下安装centOS7双系统
  4. 物联网应用技术竞赛 ——数据库添加新用户映射
  5. 如何增加架设传奇服务器
  6. codeforces 1395C Boboniu and Bit Operations(思维)
  7. 以太坊智能合约项目开发——Web3.py库安装及错误解决方案
  8. 去除快捷方式上的小箭头
  9. azkaban 调度任务一直处于preparing状态
  10. cad lisp 二次抛物线_用Cad画二次抛物线