数据库在我们的日常生活中变得越来越不可或缺。我们每天和每个地方处理数据 - 手机联系人,医疗记录,后勤数据和交易记录等。它们都存储在数据库中。没有数据库,很难想象世界会是什么样子。也许没有ATM,没有信用卡,没有GIS,也没有航空公司的预订...
数据库的历史可以追溯到电子计算的早期阶段。多年来,出现了许多数据库类型,例如分层数据库,关系数据库,对象数据库,XML数据库等。它们的硬件要求,效率以及数据的存储,组织和访问方式各不相同。
关系数据库将数据存储在表的集合中。在表之间定义关系以进行交叉引用。它存储数据的方式使用户易于理解数据的结构和内容。开发人员可以使用结构化查询语言(SQL)来查询数据,并将索引添加到数据库以便更快地进行查询,从而使关系数据库即使在数据量随时间增加时也能很好地运行。因此,尽管受到对象数据库多年的挑战,关系数据库仍然是迄今为止存储企业数据的最普遍方式。Oracle,Microsoft SQL Server,MySQL和PostgreSQL 是一些流行的关系数据库管理系统。
关系数据库的工作原理
关系数据库将数据存储为表的集合。每个表都提供一组列,这些列是值得且需要持久化的表的属性。可以在表之间添加关系,关系数据库中的关键元素,以指示两组数据是相互关联的。
表
关系数据库由一组表(即实体)组成,我们希望从中寻找信息。表由列(表的属性)和作为要存储和检索的记录的行组成。
表列
列指的是表中的一组字段。列描述了我们有兴趣为其所属的表存储的属性。
关系
关系是两个实体之间的连接。它以有意义的方式将数据(表格中)连接在一起。例如,在不知道执行交易的客户的情况下,知道交易的信息是没有意义的。因此,我们将关联客户和交易表以获取有关交易的完整信息。
示例:学校
的实体关系图(ERD)是关系数据库的可视形式。人们使用ERD来建模和设计关系数据库。以下是描述简单学校系统表格的ERD。
学校和学生是实体(注意:在ERD中,通常使用术语“实体”而不是“表”。它们实际上是相同的)。在School表中,有两列--id和name。id是主键(PK)列,以粗体显示,旁边有一个键符号。主键能够唯一地定义表中的记录。换句话说,不得有两个(或更多)学校记录共享相同的ID。学生,另一个表,有一个外键列,即SchoolId。它是对School表中主键ID的引用。请注意,外键不必是唯一的。多个学生记录可以共享相同的学校ID。在现实世界中,可以有多个学生在同一所学校学习,因此具有相同的学校ID。
学校和学生实体之间有一个连接器。我们称之为关系。在这种情况下,它是一对多的关系。这意味着具有主键(即学校)的实体仅包含一个与引用实体(即学生)中的零个,一个或多个记录相关联的记录。我们可以通过以下方式描述日常用语中的关系:学校吸收了许多学生。
ERD的关系数据库设计
如果要构建的数据库仅包含几个表,则根本不需要设计它。您可以简单地使用数据库管理系统提供的管理工具,或运行一些SQL语句来构建数据库。然而,在现实世界中情况并非如此。
如果您计划的数据库包含10个以上的表,甚至多达数百个表,那么最好在构建数据库之前考虑设计数据库。以下是数据库设计的一些好处:
- 它为您提供了一种研究数据结构的方法,以确保包含必要的表和关系。此外,精心设计的数据库可实现高效的数据添加和检索。
- 在设计过程中,您不仅可以了解数据结构,还可以更好地了解目标系统。这有助于您的团队开发系统的其余部分。
- 假设您最近开发了一个系统。三年后,您的客户已更新业务计划和策略,并要求您升级现有数据库以满足新要求。通过查看数据库来研究表定义来规划和执行更改将是一件痛苦的事。数据库设计总能让您清楚地了解自己所做的工作。
- 数据库设计不仅适合您。它还允许您的客户审查和评论您的工作。客户端不太可能具备了解数据库工作原理的技术知识。但是,高级视觉设计可以帮助他们了解您的设计是否满足他们的需求。
用Visual Paradigm绘制ERD
良好的数据库设计确实需要时间和精力来开发和构思。一个有用的数据库设计软件可以帮助您减少花费的时间和精力。Visual Paradigm不仅为您提供ERD工具,还提供一组可视化建模功能,帮助您更轻松,更快速地表达您的设计理念。它支持当今市场上大多数流行的关系数据库管理系统。以下是受支持的数据库列表:
|
|
在本节中,我们将在Visual Paradigm中使用ERD为总线路由管理系统设计关系数据库。
首先,我们需要决定要创建的实体。在此过程中,您可能会找到许多候选人。以下是一些帮助您识别实体的指南:
- 实体必须是名词(例如交易)或名词短语(例如PurchaseOrder)
- 只接受对系统有意义的名词(“乘客”被取消资格,因为公交路线管理系统不记录任何有关乘客的信息)
- 只接受具有要存储属性的名词(“票价”被取消资格,因为它没有任何有意义的属性来存储。但是,“票价”可以是潜在实体“路线”的列)
最后,获得以下实体:
- 总线
- 时间表
- 路线
- 司机
- 停止(这是一个公共汽车站)
现在,让我们开始设计过程。
- 通过从工具栏中选择Project> New,在Visual Paradigm中创建一个新项目。在“ 新建项目”窗口中,将项目命名为“ 总线路径管理系统”,然后单击底部的“ 创建空白项目 ”。
- 要创建ERD,请从工具栏中选择“ 图表”>“新建 ”。在New Diagram窗口中,选择Entity Relationship Diagram,然后单击Next。输入First Draft作为图表名称,然后单击“ 确定”。
- 从图工具栏中选择实体。
- 单击图表以创建实体。输入Bus作为实体的名称。请注意,无论实体在现实世界中有多少实例,我们通常都会对实体使用单数命名。
- 按Enter键。这为您提供了第一个实体。
- 创建其他实体以创建如下图:
现在,我们可以指定实体的列。与标识实体类似,您需要仔细考虑每个实体中需要存储的列。不要为没有系统值的数据添加列。
- 右键单击实体总线,从弹出菜单中选择“ 新建列 ”。
- 输入+ vehicle_id:integer(10)添加主键列,然后按Enter键。加号字符用于指定主键列。如果要添加非主键列,则不需要它。(注意:vehicle_id是列的名称。)
按Esc键停止创建新列。 - 将列添加到其他实体:
实体 | 列 |
时间表 | + schedule_id:整数(10) 出发: 到达日期:日期 |
路线 | + route_id:整数(10) 票价:float(10) |
停止 | + stop_id:integer(10) name:varchar(255) terminus:blob |
司机 | + driver_id:integer(10) name:varchar(255) employ_date:date |
- 到目前为止,该图应如下所示:
- 让我们联系实体。想想Route和Schedule实体。路线有许多时间表,并且时间表必须在特定路线下。因此,创建从Route到Schedule的一对多关系。将鼠标指针放在Route实体上。按资源目录图标并拖动到计划实体。
- 在Schedule上释放鼠标按钮。然后,在资源目录中选择一对多关系。
当系统提示您定义外键映射时,请保留默认设置并单击“ 确定”继续。
在Route和Schedule之间创建一对多关系: - 时间表由公共汽车处理,公共汽车可以在一天内处理多个时刻表。因此,创建从Schedule到Bus的多对一关系。这一次,拖动资源目录从实体图标安排到总线,并选择多到一- >实体从资源目录创建一个连接。
到目前为止,该图应如下所示: - 巴士和司机现在来了。驱动器驱动总线,总线由一个驱动器驱动。从总线到驱动程序创建一对一的关系。再次,使用默认设置确认外键创建。
- 对于路线和停靠站,路线包括许多公共汽车站,而公共汽车站则由许多路线共用。因此,它之间存在多对多的关系。尝试将Route和Stop与多对多关系联系起来,关系会自动分为两个一对多关系,其间产生一个链接实体Route_Stop。这是最终的ERD: