5.1 SQL数据库

    关系型数据库把数据存储在表中,表模拟程序中不同的实体。例如,订单管理程序的数据库中可能有表 customersproductsorders
    表的列数是固定的,行数是可变的。列定义表所表示的实体的数据属性。例如,customers表中可能有name、、phone等列。
    表中的行定义各列对应的真实数据。

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

    在这个数据库关系图中,roles表存储所有可用的用户角色,每个角色都使用一个唯一的id值(即表的主键)进行标识。
    users表包含用户列表,每个用户也有唯一的id值。除了主键之外,roles表中还有name列,
    users表中还有 username 列和 password 列。 users 表中的 role_id 列是外键,引用角色的 id ,通过这种方式为每个用户指定角色。

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