1.5.2 了解数据库
说明
  • 本文旨在帮助非专业人员了解数据库极其与应用程序的关系
  • 准确理解数据表结构,有助于开发复杂的管理应用程序


    • 数据库概述

      • 应用程序与数据库

        • 对于管理系统而言,其本质是通过应用程序将业务数据有序地保存到数据表,并在需要时读取
        • 应用程序与数据库通过连接程序完成读写操作,参见 1.5.3 了解Web应用中相关章节
        • 数据库由多个数据表(table)构成,每个数据表可定义多个字段(column)
      • 数据表

        • 数据表 可以简单想象成 EXCEL的一个工作表
        • 一个数据表可以根据需要定义多个字段,即数据表的“列”
        • 每条记录对应数据表的一个“行”
        • 数据表至少有一个关键字段,该字段保证数据表“行”的唯一性,可称之为“主键”
        • 数据表有时需要关联其它数据表,该关联字段,称之为“外键”。外键用于保存另一张关联表的主键值
        • 以下以班级和学生为例,展示了数据表中数据保存的方式:
          • 共有2张数据表,一张为学生表,一张为班级表
          • 学生表中有一个外键class_id,用于保存班级表的主键
          • 此方式表示,一个班级有多个学生组成,一个学生只能隶属一个班级(即班级与学生为一对多的关系)
          • 学生表

            班级表

            通过学生表中的外键值,可以定位该学生隶属哪个班级,并得到相关班级的名称,分类,开始、结束日期等

            换一个视角,如果定位一个班级,则可以查询该班级中所有学生的信息
      • 数据表关系

        • 数据表关联是数据库中最重要的概念,所有数据均依赖 主外键 建立关联关系才能建立逻辑关系
        • 数据表之间关联关系共有三种(第四种是没有关系
          • 一对一,出现此关系时可以考虑将两张表合并为一张表
          • 一对多,此关系是出现最多,也是最基本的一种。许多数据关系都是通过一对多实现的。例如:
            • 一个客户有多个联系人(客户表与联系人表,一对多)
            • 一个订单有多个明细行记录(订单表与订单明细表,一对多)
            • 以上面的班级、学生表为例,班级表与学生表,一对多。但此关系,每个学生仅能隶属一个班级。如果同时需要实现一个学生可以隶属多个班级,则关系为多对多
          • 多对多,两张表无法直接实现多对多的关系,必须依赖第3张中间表实现
            • 以上面班级为例,要实现班级与学生多对多的关系,需要增加一张中间表,该表有两个外键,同时保存了班级表的主键值和学生表的主键值(也可以由这两个字段组成联合主键)
            • 通过中间表,“孙明”(SOO2)同时隶属于“书画1班”(C01)和“英语雅思2班”(CO5)
      • 应用设计与数据表设计

        • 数据表设计是应用设计的基础。
        • 数据表设计需要根据业务情形而定(例如,前面班级与学生的关系,可以有两种不同的设计方案,应对的业务情形也不同)
        • 数据表设计最重要的是表关系设计(可以通过ER图来表达)

          以上图为例,图中共有5张数据表
          • 客户与联系人为一对多(一个客户可以有多个联系人)
          • 客户与销售合同为一对多(一个客户可以签订多份合同)
          • 销售合同与销售发票为一对多(一份销售合同可以分多次开票)
          • 销售发票与发票明细为一对多(一张发票可以有多个明细行)
    • 管理工具

      • 数据库管理工具可以帮助我们直观的管理数据库
      • 常用的MySql管理工具有,Navicat、HeidiSQL等
      • 以下已HeidiSQL为例,演示使用方法
        • 下载HeidiSQL
        • 安装后创建一个会话
        • 连接成功后可以查看数据库


    • SQL语句

      • SQL语句是对数据库操作的标准语言,简单易学
      • 对数据的基本操作有四种,增(insert)、删(delete)、改(update)、查(select),最常用的是查询。示例如下:
        select appId, appVersion, name from app_app where published=1
        

        以上语句含义为:从表“app_app”中查询字段“published”值等于1的记录行,显示“appId”,“appVersion”和“name”3列
      • 数据表别名:在SQL语句中,我们常对表名定义别名,以方便编写语句。示例如下:
        select a.appId, a.appVersion, a.name 
        from app_app a 
        where a.published=1
        

        以上语句中,app_app表的别名为“a”,在HeidiSQL等工具中,完成别名定义后,输入“a.”即可自动获取该表所有字段

      • 关联查询:通过主外键关联,可以实现多表关联查询。示例如下:
        select a.name, b.formId, b.name
        from app_app a, app_form b
        where a.appId=b.appId and a.name='教学应用 - 入门样例'
        

        以上语句含义为:表app_form通过外键“appId”与app_app的主键“appId”将两表关联,查询所有应用名称为“教学应用 - 入门样例”的表单行记录
      • 更多SQL语法,请参考 W3C SQL教程
    • 汇智魔方数据库

Create by Sean Fung on 2014-08-28 17:28:06.0
Last updated by Sean Fung on 2015-10-07 10:36:15.0