问题导向清单
问题 | 解决方案 |
当普通文件(.txt, .json)变大时,存取普通文件内容将会变得非常慢。 | 使用 MySQL。 |
在一个普通文件中查找特定的一个或者一组记录非常困难。 | 使用 MySQL。 |
处理并发访问可能会遇到问题。锁定普通文件可能会导致竞争。 | 使用 MySQL。 |
顺序的文件处理,也就是从文件开始处一直读到文件的结束。如果需要在文件中间插入记录或者删除记录(随机访问),比较困难。必须将整个文件读入到内存中,并在内存中修改它,然后再将整个文件写回去。这会带来一定的开销。 | 使用 MySQL。 |
关系型数据库管理系统(RDBMS)有以下优点:
- 1.RDBMS 提供了比 普通文件 更快的 数据访问速度。
- 2.RDBMS 更容易查询并提取满足特定条件的数据。
- 3.RDBMS 具有特定内置机制处理 并发访问。
- 4.RDBMS 可以提供对数据的 随机访问。
- 5.RDBMS 具有内置的权限系统。
关系型数据库 是指采用了 关系模型 来组织数据的数据库,其以 行 和 列 的形式存储数据。这些行和列被称为 表(二维表),一组表(二维表)组成了数据库。
关系模型是指用 二维表 的形式表示 实体 和 实体间联系 的数据模型。
在现实世界中,实体是指现实世界中客观存在的并可以相互区分的对象或事物。
在数据库中,实体是指能够完整描述某一类事物当中的某个个体的具体数据的集合。实体也称为数据对象。
这类事物可以是:
- 角色:客户(客户ID,客户姓名,客户地址)
实体:客户(1,王浩,北京市XXX)
- 事物:汽车(汽车ID,品牌,生产厂家,型号,车体类型,颜色)
- 抽象的概念:订单(订单ID,客户ID,商品,价格)
实体:订单(1,王浩,牛奶,60.00)
- 行为:结账(账单ID,客户ID,订单ID,付款方式)
就数据库而言,实体往往指某类事物的集合,可以是具体的人、事、物,也可以是抽象的概念、联系等。
把某一类数据对象的个体称为实体。
在划分实体和属性时,首先要按现实世界中事物的自然划分来定义实体和属性。如对职工的描述中,职工是实体,而姓名、年龄和民族等是职工的属性。
关系模型是以 集合论 中的 关系概念 为基础发展起来的。关系模型中无论是 实体 还是 实体间联系,均由单一的结构类型——关系(二维表) 来表示。在实际的关系型数据库中的关系也称为 表。一个关系型数据库就是由若干个表组成。
用户通过 查询 来检索关系型数据库中的数据。关系模型可以简单理解为 二维表格模型,而一个关系型数据库就是由 二维表 及其之间的 关系 组成的一个数据组织。
关系型数据库由 关系 组成,这些关系通常由 表。表就是 数据表。
也就是说,关系型数据库的组成单元是一个一个的数据表。
表名 客户
字段/属性 客户ID | 字段/属性 客户姓名 | 字段/属性 客户密码 | 字段/属性 客户地址 |
值 1 | 值 wanghao | 值 12345 | 值 北京XX区XX街XX小区XX门牌号 |
值 2 | 值 xiaoming | 值 12345 | 值 上海 |
值 3 | 值 wanghao | 值 12345 | 值 广州XX区XX街XX小区XX门牌号 |
说明:
- 1.该表具有一个名称,即表名。
- 2.该表具有几个数据列,每一列对应于一种不同的数据。
- 3.每一行都记录着一个客户的信息。
表中的每一列都有唯一的名称,包含不同的数据。每一列都有一个相关的数据类型。
列通常称为 字段 或者 属性。
表中的每一行代表一个客户,每一行具有相同的格式,因而也具有相同的字段/属性。
行也称为记录或元组(tuple)。
每一行由对应于每一列的单个值组成。每个值必须与该列定义的数据类型相同。
表中的每一行代表一个客户,要有一个能够识别每一个客户的方法。如果用 字段 客户姓名 作为客户之间的区分,会发现可能有重名现象。
可以在应用程序中为每一个客户分配一个唯一的 字段 客户ID,就像拥有唯一的银行账号或会员卡号一样,它使得将详细信息存取到数据库的操作更为方便。
一个表中用来标识数据(客户信息)的列称为 键 或 主键。一个键可以由几列组成。例如,如果选择用“wanghao,北京XX区XX街XX小区XX门牌号”来标识客户 wanghao,那么该键包含两列:客户姓名、客户地址。这样做的目的是保证 键/主键 具有唯一性。
通常,数据库由多个表组成。例如,一张表存有客户信息,一张表存有客户的订单。
客户信息
客户ID | 客户姓名 | 客户密码 | 客户地址 |
1 | wanghao | 12345 | 北京XX区XX街XX小区XX门牌号 |
2 | xiaoming | 12345 | 上海 |
3 | wanghao | 12345 | 广州XX区XX街XX小区XX门牌号 |
订单
订单ID | 客户ID | 商品 | 价格 | 购买日期 |
1 | 3 | 牛奶 | 50.00 | 2020.10.1.19:30 |
2 | 1 | 球鞋 | 1000.00 | 2020.10.1.19:31 |
3 | 1 | 袜子 | 20.00 | 2020.10.1.19:32 |
4 | 3 | 汽水 | 36.00 | 2020.10.1.19:33 |
说明:
- 1.订单表 中的每一行代表一个订单,该订单由一个客户所创建。
- 2.要知道订单的客户是谁,需要在 订单表 中保存客户的信息,该信息能够准确识别出订单对应的唯一客户,因此需要保存 客户信息表 的键/主键。
- 3.在 订单表 中查询订单记录,依据订单记录中的字段 客户ID(客户信息表中的键) 在 客户信息表 中查询客户信息。
- 4.订单表 中的每一个订单都引用到 客户信息表 中的某个客户。
订单表 和 客户信息表 的这种关系用关系型数据库术语来描述就是外键。字段 客户ID 是 客户信息表 中的主键,当字段 客户ID 出现在其他表(订单表)中的时候,就称字段 客户ID 为 外键。
订单表 和 客户信息表 合二为一 不是更省事?其实并不然,这其中有很多考量。
数据库整套表的完整设计称为数据库的模式(Schema)。模式是数据库的设计蓝图。模式应该显示表格及表格的列、每个表的主键和外键。模式并不会包含任何数据,但是可以在模式里使用 示例数据 来解析这些数据的含义。模式可以在非正式的图表、实体关系图,或者以文本格式表示。
/*
*
*/
R(U, D, dom, F)
//通常简记为:
R(U)
//或者:
R(A1,A2,A3,...,An)
//例:
客户信息(客户ID, 客户姓名, 客户密码, 客户地址)
订单(订单ID, 客户ID, 商品, 价格, 购买日期)
说明:
- 1.在一个模式中,带有 下划线 的元素表示该元素是所在关系(表)的主键。
- 2.斜体 的元素表示该元素是所在关系(表)的外键。
外键 表示两个表中数据之间的关系。例如,订单表 到 客户信息表 的链接关系表示 订单表 中一行与 客户信息表 中一行的关系。
关系型数据库中有 3 种基本的关系类型。根据关系双方所含对象的多少,可以将这些关系分为 3 种关系:一对一、一对多 和 多对多。
关系实际上就是 模式(关系模式) 在某一时刻的 状态 或 内容。也就是说,关系模式是型,关系是它的值。关系模式是静态的、稳定的,而关系是动态的、随时间不断变化的,因为关系操作在不断地更新着数据库中的数据。但在实际当中,常常把 关系模式 和 关系 统称为关系,可以从上下文中加以区别。