5.1 SQL数据库
关系型数据库把数据存储在表中,表模拟程序中不同的实体。例如,订单管理程序的数据库中可能有表 customers
、products
和orders
。
表的列数是固定的,行数是可变的。列定义表所表示的实体的数据属性。例如,customers
表中可能有name
、、phone
等列。
表中的行定义各列对应的真实数据。
下图展示了一个简单数据库的关系图。
这个数据库中有两个表,分别存储用户和用户角色。
连接两个表的线代表两个表之间的关系。
在这个数据库关系图中,roles
表存储所有可用的用户角色,每个角色都使用一个唯一的id
值(即表的主键)进行标识。users
表包含用户列表,每个用户也有唯一的id
值。除了主键之外,roles
表中还有name
列,users
表中还有 username 列和 password 列。 users 表中的 role_id 列是外键,引用角色的 id ,通过这种方式为每个用户指定角色。
但从另一方面来看,把数据分别存放在多个表中还是很复杂的。生成一个包含角色的用户列表会遇到一个小问题,
因为在此之前要分别从两个表中读取用户和用户角色,再将其联结起来。关系型数据库引擎为联结操作提供了必要的支持。