SQL 入门教程:样例表脚本

目录汇总:SQL 零基础入门教程

编写 SQL 语句需要良好地理解基本数据库设计。如果不知道什么信息存放在什么表中,表与表之间如何互相关联,行中数据如何分解,那么要编写高效的 SQL 是不可能的。

强烈建议读者实际练习本书的每个例子。所有课都共同使用了一组数据文件。为帮助你更好地理解这些例子、学好各课内容,本附录描述了所用的表、表之间的关系以及如何创建(或获得)它们。

一、样例表

本书中所用的表是一个假想玩具经销商使用的订单录入系统的组成部分。这些表用来完成以下几项任务:

  • 管理供应商;
  • 管理产品目录;
  • 管理顾客列表;
  • 录入顾客订单。

完成它们需要 5 个表(它们作为一个关系数据库设计的组成部分紧密关联)。以下各节给出每个表的描述。

说明:简化的例子

这里使用的表不完整,现实世界中的订单录入系统还会记录这里所没有的大量数据(如工资和记账信息、发货追踪信息等)。不过,这些表确实示范了现实世界中你将遇到的各种数据的组织和关系。读者可以将这些技术用于自己的数据库。

1.1 表的描述

下面介绍 5 个表及每个表内的列名。

  1. Vendors

    Vendors 表存储销售产品的供应商。每个供应商在这个表中有一个记录,供应商 ID 列(vend_id)用于进行产品与供应商的匹配。

    表 1 Vendors 表的列

    说明
    vend_id 唯一的供应商 ID
    vend_name 供应商名
    vend_address 供应商的地址
    vend_city 供应商所在城市
    vend_state 供应商所在州
    vend_zip 供应商地址邮政编码
    vend_country 供应商所在国家
    • 所有表都应该有主键。这个表应该用 vend_id 作为其主键。
  2. Products

    Products 表包含产品目录,每行一个产品。每个产品有唯一的 ID(prod_id 列),并且借助 vend_id(供应商的唯一 ID)与供应商相关联。

    表 2 Products 表的列

    说明
    prod_id 唯一的产品 ID
    vend_id 产品供应商 ID(关联到 Vendors 表的 vend_id
    prod_name 产品名
    prod_price 产品价格
    prod_desc 产品描述
    • 所有表都应该有主键。这个表应该用 prod_id 作为其主键。
    • 为实施引用完整性,应该在 vend_id 上定义一个外键,关联到 Vendors 的 vend_id 列。
  3. Customers

    Customers 表存储所有顾客信息。每个顾客有唯一的 ID(cust_id 列)。

    表 3 Customers 表的列

    说明
    cust_id 唯一的顾客 ID
    cust_name 顾客名
    cust_address 顾客的地址
    cust_city 顾客所在城市
    cust_state 顾客所在州
    cust_zip 顾客地址邮政编码
    cust_country 顾客所在国家
    cust_contact 顾客的联系名
    cust_email 顾客的电子邮件地址
    • 所有表都应该有主键。这个表应该用 cust_id 作为它的主键。
  4. Orders

    Orders 表存储顾客订单(不是订单细节)。每个订单唯一编号(order_num 列)。Orders 表按 cust_id 列(关联到 Customers 表的顾客唯一 ID)关联到相应的顾客。

    4 Orders 表的列

    说明
    order_num 唯一的订单号
    order_date 订单日期
    cust_id 订单顾客 ID(关联到 Customers 表的 cust_id
    • 所有表都应该有主键。这个表应该用 order_num 作为其主键。
    • 为实施引用完整性,应该在 cust_id 上定义一个外键,关联到 Customerscust_id 列。
  5. OrderItems

    OrderItems 表存储每个订单中的实际物品,每个订单的每个物品一行。对于 Orders 表的每一行,在 OrderItems 表中有一行或多行。每个订单物品由订单号加订单物品(第一个物品、第二个物品等)唯一标识。订单物品用 order_num 列(关联到 Orders 表中订单的唯一 ID)与其相应的订单相关联。此外,每个订单物品包含该物品的产品 ID(把物品关联到 Products 表)。

    表 5 OrderItems 表的列

    说明
    order_num 订单号(关联到 Orders 表的 order_num
    order_item 订单物品号(订单内的顺序)
    prod_id 产品 ID(关联到 Products 表的 prod_id
    quantity 物品数量
    item_price 物品价格
    • 所有表都应该有主键。这个表应该用 order_numorder_item 作为其主键。
    • 为实施引用完整性,应该在 order_numprod_id 上定义外键,关联 order_numOrdersorder_num 列,关联 prod_idProductsprod_id 列。

数据库管理员通常使用关系图来说明数据库表的关联方式。要记住,正如上面表描述提到的,外键定义了这些关系。图 1 是本附录描述的五个表的关系图。

样例表关系图

图 1 样例表关系图

二、获得样例表

学习各个例子,需要一组填充了数据的表。所需要获得和运行的东西都可以在本书网页 http://forta.com/books/0135182794 找到。

可以从上述 URL 下载适用于你的 DBMS 的 SQL 脚本。对于每个 DBMS,有两个文件:

  • create.txt 包含创建 5 个数据库表(包括定义所有主键和外键约束)的 SQL 语句。
  • populate.txt 包含用来填充这些表的 SQL INSERT 语句。

这些文件中的 SQL 语句依赖于具体的 DBMS,因此应该执行适合于你的 DBMS 的那个。这些脚本为方便读者而提供,作者对执行它们万一引起的问题不承担任何责任。

提示:SQLite 数据文件

SQLite 把数据文件存储在单独一个文件里。你可以使用创建和填充脚本创建自己的数据文件。或者简单起见,直接从前面的网站下载一个立即可用的文件。

适用于其他 DBMS 的脚本可能会根据需要或请求而增加。

SQL 语句的语法 提供了在几个流行环境中执行脚本的说明。

说明:创建,然后填充

必须在执行表填充脚本前执行表创建脚本。应该检查这些脚本返回的错误。如果创建脚本失败,则应该在继续表填充前解决存在的问题。

说明:具体 DBMS 的设置指令

用于设置 DBMS 的具体步骤依使用的 DBMS 有很大不同。从本书网页下载脚本或数据库时,你会看到 README 文件,它提供了针对特定 DBMS 的具体设置和安装步骤。

(完)

comments powered by Disqus