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

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

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

1. 设计实体表

1.1 司机表

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

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

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

1.2 车辆表

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

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

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

1.3 车队表

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

2. 设计关系表

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

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

2.1 车辆-车队 组成

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

车辆表(加了外键)

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

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

车辆-车队组成 表

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

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

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

2.2 车辆-司机 使用表

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

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

2.3 司机-车队 聘用表

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

字段名中文描述类型长度是否可以为空是否作为主键
team_id车队号id20
driver_id司机编号id20
salary工资float20
date聘期datetime*
数据库系统(四) 数据库系统(四)---关系型数据库设计及 关系型数据库设计及E-R 1、关系型数据库:   关系型数据库是⼀类采⽤关系模型作为逻辑数据模型的数据库系统,遵从数据库设计的基本步骤,包括:需求分析、概念结构设计、逻辑结构设 计、物理结构设计数据库实施、数据库的运⾏和维护等阶段。 概念结构设计与逻辑结构设计是关系数据库整个设计过程的关键。 2、关系数据库设计过程与各级模式   在关系数据库设计的不同阶段,会形成数据库的各级模式。   1)需求分析阶段,综合各个⽤户的应⽤需求;   2)概念结构设计阶段,形成独⽴于机器特点、独⽴于各个关系数据库管理系统产品的概念模式;   3)逻辑结构设计阶段,将 E-R 转换成具体的数据库产品⽀持的关系数据模型,形成数据库逻辑模式,然后根据⽤户处理的要求、安全性的考 虑,在基本的基础上再建⽴必要的视,形成数据的外模式;   4)物理结构的设计阶段,根据关系数据库管理系统的特点和处理的需要,进⾏物理存储安排,建⽴索引,形成数据库内模式。 3、 概念结构设计⽅法   关系数据库的概念结构设计通常采⽤⾃顶向下法,它通过两个步骤来完成概念设计,⾸先建⽴局部信息结构,然后将局部信息结构合成为全局信 息结构并优化,使⽤ E-R 作为概念模型的描述⼯具。 1)局部信息结构设计   局部信息结构设计根据需求分析报告中标明的不同⽤户视范围所建⽴的满⾜该范围内⽤户需求的信息结构,称为局部信息结构。   局部信息结构设计的步骤包括:确定局部范围;选择实体;选择实体关键字; 确定实体间联系;确定实体的属性。 2)E-R ⽰⽅法   概念结构设计就是将需求分析得到的⽤户需求抽象为信息结构的过程,通常使⽤ E-R 来作为描述现实世界的建模⼯具。E-R 提供了⽰信息 世界中实体、属性和联系的⽅法。   1.实体型,⽤矩形⽰,写明实体的名称;   2.属性,⽤椭圆形⽰,并⽤⽆向边将其与其相应的实体连接起来。   3.联系,⽤菱形⽰,写明联系的名称,⽤⽆向边分别与有关实体连接起来,同时在⽆向边旁标注联系的类型(1:1、1:N 或 M:N),如果⼀个联系 具有属性, 则这些属性也要⽤⽆向边与该联系连接起来。   两个实体型之间、两个以上的实体型之间以及单个实体型内的联系,都会存在如下关系: ⼀对⼀联系(1:1) ⼀对多联系(1:N) 多对多联系 (M:N) 3)全局信息结构设计   全局信息结构设计是将上述步骤中产⽣的所有局部信息结构合并成为⼀个全局信息结构。 各局部 E-R 之间的冲突主要现在三个⽅⾯:   3.1).属性冲突:属性域冲突和属性取值单位冲突。   3.2).命名冲突:同名异义和异名同义。   3.3).结构冲突:     同⼀对象在⼀个局部 E-R 中作为实体,⽽在另⼀个 局部 E-R 中作为属性;     同⼀实体在不同的 E-R 中属性个数和类型不同;     实体之间的联系在不同的 E-R 中是不同的类型。   eg:   【例】设有如下实体:     学⽣:学号,姓名,性别     课程:课程号,课程名,学分     班级:班号,班名,     其中,每个班有若⼲学⽣,每个学⽣只可以在—个班级学习;每个学⽣可选修多门课程,每门课程可被多个学⽣选修,学⽣选修课程要记录 成绩。    1. 试画出反映上述实体关系的 E-R (不必画实体的属性)。          注意:学⽣选修课程之后才能有成绩,故成绩是选修(联系)的属性。 4、逻辑结构设计⽅法   逻辑结构设计的任务是把在概念结构设计产⽣的概念模型转换为具体的 DBMS 所⽀持的逻辑数据模型,也就是导出特定的 DBMS 可以处理的数 据库逻辑结构。 通常包括三项⼯作:将 E-R 转换为关系模型、对关系数据模型进⾏优化、设计⾯向⽤户的外模式。 1)E-R 向关系模型的转换 遵循原则如下:   1. ⼀个实体型转换为⼀个关系模式。   2. ⼀个⼀对⼀联系可以转换为⼀个独⽴的关系模式。   3. ⼀个⼀对多联系可以转换为⼀个关系模式。   4. ⼀个多对多联系转换为⼀个关系模式。   5. 具有相同码的关系模式可合并。  eg:   使⽤3中的⽰例,将E-R转化为关系模式,并说明主外键   (1)⼀个实体型对应⼀个关系模式:    R学⽣(学号,姓名,性别)     R课程(课程号,课程名,学分)     R班级(班号,班名) (2)⼀个⼀对多联系可转化为⼀个关系模式(中间)     R属于(学号、班号)外键 学号 和 班号   (3)⼀个多对多联系可转化为⼀个关系模式(中间)     R选修(学号、课程号、成绩)外键 学号 和 课程号   (4)R学⽣和R属于可合并成⼀张    
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

okfang616

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值