21.数据库设计

数据库设计

第一节:为什么需要规范的数据库设计
大多数开发人员开发复杂度不高项目时,都是根据业务需求,直接创建数据库,创建表和插入测试数据,然后再查下数据,为什么需要强调先设计再创建数据库,创建表呢?原因非常简单,正如修造建筑物一样,如果盖一间茅屋或一间简易平房,您会花钱请人设计房屋图纸吗?毫无疑问,没人请,但是如果是房地产开发商开发一个楼盘,修建多栋楼的小区,他会请人设计施工图纸吗?答案是肯定的,不但开发商会考虑设计施工图纸,甚至很多专业的购房者也会在看房时要求开发商出示设计图纸。
同样道理,在实际的项目开发中,如果系统的数据存储量较大,设计的表比较多。表和表之间的关系比较复杂,我们就需要首先考虑规范的数据库设计,然后再进行具体的创建库。创建表的工作,不管是创建动态网站,还是创建桌面窗口应用程序,数据库设计的重要性都不言而喻,如果设计不当,会存在数据操作异常,修改复杂,数据冗余等问题,程序性能会受到影响,通过进行规范化的数据库设计,可以消除不必要的数据冗余,获得合理的数据库设计,提高项目的应用性能。
1.1 什么是数据库设计

​ 数据库设计就是将数据库中中数据实体以及这些数据实体之间关系进行规划和结构化的过程。

​ 如图所示为一个数据库的结构,该数据库包含学生及其成绩信息,图中还显示了Student(学生)、Gade(年级)、Course(课程)以及Result(成绩)这四个数据实体之间的关系。
在这里插入图片描述

1.2 数据库设计重要性

数据库中创建的数据实体的种类,以及在数据实体之间建立的复杂关系是决定数据库系统效率的重要因素。

槽糕的数据库设计表现在两个方面

  • 效率低下
  • 更新和检索数据时会出现许多问题

良好的数据库设计表现在以下几方面

  • 效率高
  • 便于进一步扩展
  • 使得应用程序的开发变得更容易
第二节 设计数据库步骤

开发一个项目需要经过需求分析,概要设计,(详细设计),代码编写,运行测试和上线维护几个阶段,下面重点讨论在各个阶段中数据库的设计过程。

​ 需求分析阶段:根据项目功能需求,分析客户的业务和数据实体。

​ 概要设计阶段:绘制数据库的ER模型图,用于在项目团队内部、设计人员和客户之间进行沟通,确认需求信息的正确性和完整性。

​ 详细设计阶段:将ER图转换为多张表,进行逻辑设计,确认各表的主外键并应用数据库设计的三大范式进行审核,经项目组开会讨论确定后,还需根据项目的技术实现团队开发能力以及项目的经费来源,选择具体的数据库(如MySQL成 Oracle等)进行物理实现。包括创建库和创建表,存储过程等,创建完毕后,开始进入代码编写阶段,开发前后端应用程序。

​ 现在,我们共同讨论在需求分析阶段,后台数据库的设计步骤。

​ 需求分析阶段的重点是调查,收集并分析客户业务的数据需求,处理需求,安全性与完整性需求常用的需求调研方法有在客户的公司跟班实习,组织召开调查会,邀请专人介绍,设计调查表.并请用户填写和查阅与业务相关数据记录等。

​ 常用的需求分析方法有调查客户的公司组织情况,各部门的业务需求情况,协助客户分析系统的各种业务需求和确定新系统的边界。

​ 无论数据库的大小和复杂程度如何,在进行数据库的系统分析时,可以参考下列基本步骤

  • (1) 收集信息(根据需求说明书)
  • (2) 标识实体
  • (3) 标识每个实体需要存储的详细信息
  • (4) 标识实体之间的关系
2.1 收集信息

创建数据库之前,必须充分理解数据库需要完成的任务和功能。简单地说,就是需要了解数据库需要存储哪些信息(数据),实现哪些功能,以酒店管理系统为例.我们需要了解酒店管理系统的具体功能,以及在后台数据库中保存的数据。
酒店为客人休息准备充足数量的客房,后台数据库需要存放每间客房的信息,如房间号,房间类型,价格等。
旅客在酒店入住要办理入住手续,后台数据库需要存放客人的相关信息,如客人姓名房间号等。

2.2 标识实体

在收集需求信息后,必须标识数据库要管理的关键对象或实体,我们曾经学习过对象的概念,实体可以是有形的事物如人或产品:也可以是无形的事物,如商业交易,公司部门或贷款周期,在系统中标识这些实体以后,与它们相关的实体就会条理清楚,以酒店管理系统为例,我们需要标识出系统中的主要实体。
客房:包括单人间、标准间、三人间、豪华间、总统套房。
客人:入住酒店旅客的个人信息
数据库中的每个不同的实体都拥有一个与其相对应的表,也就是说,在我们的酒管管理系统数据库库中,会对应至少两张表,分别是客房表和客人表。
注意:实体一般是名词,一个实体只描述一件事情,不能重复出现含义相同的实体。

2.3 标识每个实体的详细信息(数据项)

将数据库中的主要实体标识为表的候选实体以后,下一步就是标识每个实体存储的详细信息,也称为该实体的属性,这些属性将组成表中的列,简单地说:就是需要细分

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了设计一个高效的MongoDB教务数据库,我们需要考虑以下几个方面: 1. 数据库结构设计:我们需要确定数据库中需要存储哪些数据,以及它们之间的关系。例如,我们需要存储学生信息、课程信息、教师信息、成绩信息等等。这些信息之间的关系可以用MongoDB的嵌套文档来表示。 2. 数据库索引设计:为了提高查询效率,我们需要在数据库中创建索引。在MongoDB中,我们可以使用createIndex()方法来创建索引。通常情况下,我们需要为经常被查询的字段创建索引。 3. 数据库安全性设计:我们需要确保数据库的安全性,防止数据泄露或者被恶意攻击。在MongoDB中,我们可以使用用户认证和角色管理来保护数据库的安全性。 下面是一个简单的MongoDB教务数据库设计示例: ```python { "students": [ { "name": "张三", "age": 20, "gender": "男", "major": "计算机科学与技术", "courses": [ { "name": "数据库原理", "teacher": "李四", "score": 90 }, { "name": "操作系统", "teacher": "王五", "score": 85 } ] }, { "name": "李四", "age": 21, "gender": "女", "major": "软件工程", "courses": [ { "name": "数据结构", "teacher": "张三", "score": 95 }, { "name": "计算机网络", "teacher": "王五", "score": 88 } ] } ], "teachers": [ { "name": "张三", "age": 35, "gender": "男", "title": "教授", "courses": [ { "name": "数据库原理", "students": ["张三", "李四"] }, { "name": "数据结构", "students": ["李四"] } ] }, { "name": "李四", "age": 40, "gender": "女", "title": "副教授", "courses": [ { "name": "操作系统", "students": ["张三"] }, { "name": "计算机网络", "students": ["李四"] } ] } ] } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值