SQL必知必会 附录1

附录A 样例表脚本

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

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

A.1 样例表

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

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

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

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

表的描述

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

  1. Venders 表

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

表A-1 Vendors表的列

说明
vend_id唯一的供应商ID
vend_name供应商名
vend_address供应商的地址
vend_city供应商所在城市
vend_state供应商所在州
vend_zip供应商地址邮政编码
vend_country供应商所在国家

·所有表都应该有主键。这个表应该用vend_id作为其主键

  1. Products

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

表A-2 Products表的列

说明
prod_id唯一的产品ID
vend_id产品供应商ID(关联道Vendors表的vend_id)
prod_name产品名
prod_price产品价格
prod_desc产品描述

·所有表都应该有主键。这个表应该用prod_id作为其主键

·为实施引用完整性,应该再vend_id上定义一个外键,关联道Vendors的vend_id列

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

表A-3 Customers表的列

说明
cust_id唯一的顾客ID
cust_name顾客名
cust_address顾客的地址
cust_city顾客所在城市
cust_state顾客所在州
cust_zip顾客地址邮政编码
cust_country顾客所在国家
cust_contact顾客的联系名
cust_email顾客的电子邮件

·所有表都应该有主键。这个表应该用cust_id作为它的主键

  1. Orders表

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

表A-4 Orders表的列

说明
order_num唯一的订单号
order_date订单日期
cust_id订单顾客ID(关联到Customer表的cust_id)

·所有表都应该有主键。这个表应该用order_num作为其主键

·为实施引用完整性,应该再cust_id上定义一个外键,关联到Customers的cust_id列

  1. OrderItems表

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

表A-5 OrderItems表的列

说明
order_num订单号(关联到Orders表的order_num)
order_item订单物品号(订单内的顺序)
prod_id产品ID(关联到Products表的prod_id)
quantity物品数量
item_price物品价格

·所有表都应该有主键。这个表应该用order_num和order_item作为其主键

·为实施引用完整性,应该在order_num和prod_id上定义外键,关联order_num到Orders的order_num列,关联prod_id到Products的prod_id列

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

在这里插入图片描述

A.2 获得样例表

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

A.2.1 下载可供使用的数据文件

可从上述URL下载一个填充了数据的如下格式的文件:

  • Apache Open Office Base
  • Microsoft Access(2000和2007)
  • SQLite

如果使用这些文件,不需要执行任何SQL创建和填充脚本

A.2.2 下载 DMBS SQL 脚本

大多数DBMS以不自己完成文件分布的格式存储数据(如Access、Open Office Base和SQLite那样)。对于这些DBMS,可以从上述URL下载SQL脚本。对于每个DBMS,有两个文件

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

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

在本书付印时,有以下脚本可供使用:

  • IBM DB2
  • Microsoft SQL Server(包括Microsoft SQL Server Express)
  • Maria DB
  • MySQL
  • Oracle(包括 Oracle Express)
  • PostgreSQL

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

附录B提供了在几个流行环境中执行脚本的说明

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

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值