5.1 SQL数据库

关系型数据库把数据存储在中,表为应用中不同的实体建模。例如,订单管理应用的数据库中可能有 customers、products 和 orders 等表。

表中的数是固定的,数是可变的。列定义表所表示的实体的数据属性。例如,customers 表中可能有 name、address、phone等列。表中的行定义部分或所有列对应的真实数据。

表中有个特殊的列,称为主键,其值为表中各行的唯一标识符。表中还可以有称为外键的列,引用同一个表或不同表中某一行的主键。行之间的这种联系称为关系,这正是关系型数据库模型的基础。

图 5-1 展示了一个简单数据库的关系图。这个数据库中有两个表,分别存储用户和用户角色。连接两个表的线代表两个表之间的关系。

图 5-1:关系型数据库示例

数据库结构的这种图示法称为实体 – 关系图。其中,方框表示数据库表,里面列出表的属性(或列)。roles 表存储所有可用的用户角色,每个角色都使用一个唯一的 id 值(即表的主键)进行标识。users 表存储用户,每个用户也有唯一的 id 值。除了 id 主键之外,
roles 表中还有 name 列,users 表中还有 username 和 password 列。

users 表中的 role_id 列是外键。连接 roles.id 和 users.role_id 两列的线表示两个表之间的关系。这条线两端的符号表明关系的基数。在 roles.id 一侧的短竖线表示“一个”,而 users.role_id 一侧的符号表示“多个”。二者一起构成一对多关系,即 roles 表中的各行可以对应于 user 表中的多行。

从这个例子可以看出,关系型数据库存储数据很高效,而且避免了重复。将这个数据库中的用户角色重命名也很简单,因为角色名只出现在一个地方。一旦在 roles 表中修改完角色名,所有通过 role_id 引用这个角色的用户就都能立即看到更新。

但从另一方面来看,把数据分别存放在多个表中还是很复杂的。生成一个包含角色的用户列表会遇到一个小问题,因为要先分别从两个表中读取用户和用户角色,再将其联结起来。关系型数据库引擎为联结操作提供了必要的支持。

《基于Python的Web应用开发实战(第二版)》

猜你喜欢

转载自www.cnblogs.com/hl001/p/10234103.html
5.1
今日推荐