附录B 样例表

本附录简要描述本书中所用的表及它们的用途。
编写SQL语句需要对基础数据库的设计有良好的理解。不知道什么信息存储在什么表中,表之间如何关联以及行内数据如何分解,是不可能编写出高效的SQL的。
建议你实际试验本书中没涨的每个例子。各章都使用相同的一组数据文件。为帮助你了解这些例子和掌握各章介绍的内容,本附录描述了所用的表、表之间的关系以及如何获得它们。

B.1 样例表

本书中使用的样例表为一个想象的随身物品推销商使用的订单录入系统,这些随身物品可能是你喜欢的卡通人物需要的(是的,卡通人物,没人规定学习MySQL必须沉闷地学)。这些表用来完成以下几个任务:

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

要完成这几个任务需要作为关系数据库设计成分的紧密联系的6个表。以下几节描述各个表。

简化的例子 这里使用的表并不完整。现实中的订单录入系统必须记录这里没有包含的大量其他数据(如,报酬和记账信息、发货跟踪信息等)。不过,这些表演示了你在多数安装中会遇到的各种数据的组织和关系。你可以把这些方法和技术应用到自己的数据库中。

表的描述

以下介绍6个表和每个表中的列。

表的列出顺序 6个表之所以要用这里的次序列出是因为它们之间的依赖关系。因为products表依赖于vendors表,所以先列出vendors,其他表的列出也有类似的关系。

vendors表
vendors表存储销售产品的供应商。每个供应商在这个表中有一个记录,供应商ID(vend_id)列用来匹配产品和供应商。
列 |说明
------------|--------|
vend_id |唯一的供应商ID|
vend_name |供应商名
vend_address|供应商的地址
vend_city |供应商的城市
vend_state |供应商的州
vend_zip |供应商的邮政编码
vend_country|供应商的国家

  • 所有表都应该有主键。这个表使用vend_id作为主键。vend_id为一个自动增量字段。

products表
products表包含产品目录,每行一个产品。每个产品有唯一的ID(prod_id列),通过vend_id(供应商的唯一ID)关联到它的供应商。

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

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

说明
cust_id 唯一的顾客ID
cust_name 顾客名
cust_address 顾客的地址
cust_city 顾客的城市
cust_state 顾客的州
cust_zip 顾客的邮政编码
cust_country 顾客的国家
cust_contact 顾客的联系名
cust_email 顾客的联系email地址
  • 所有表都应该定义主键,这个表将使用cust_id作为它的主键。cust_id是一个自动增量字段。

orders表
orders表存储顾客订单(但不是订单细节)。每个订单唯一的编号(order_num列)。订单用cust_id列(它关联到customer表的顾客唯一ID)与相应的顾客关联。

说明
order_num 唯一订单号
order_date 订单日期
cust_id 订单顾客ID(关联到customers表的cust_id)
  • 所有表都应该定义主键,这个表使用order_num作为它的主键。order_num是一个自动增量字段。
  • 为实施引用完整性,应该在cust_id定义一个外键,关联到customers的cust_id。

orderitems表
orderitems表存储每个订单中的实际物品,每个订单的每个物品占一行。对orders中的每一行,orderitems中有一行或多行。每个订单物品由订单号加订单物品(第一个物品、第二个物品等)唯一标识。订单物品通过order_num列(关联到orders中订单的唯一ID)与它们相应的订单关联。此外,每个订单项包含订单物品的产品ID(它关联物品到products表)。

说明
order_num 订单号(关联到orders表的order_num)
order_item 订单物品号(在某个订单中的顺序)
prod_id 产品ID(关联到products表的prod_id)
quantity 物品数量
item_price 物品价格
  • 所有表都应该有主键,这个表使用order_num和order_item作为其主键。
  • 为实施引用完整性,应该在order_num上定义外键,关联它到orders的order_num,在prod_id上定义外键,关联它到products的prod_id。

productnotes表
productnotes表存储与特定产品有关的注释。并非所有产品都有相关的注释,而有的产品可能有许多相关的注释。

说明
note_id 唯一注释ID
prod_id 产品ID(对应于products表中的prod_id)
note_date 增加注释的日期
note_text 注释文本
  • 所有表都应该有主键,这个表应该使用note_id作为其主键。
  • 列note_text必须为FULLTEXT搜索进行索引。
  • 由于这个表使用全文本搜索,因此必须指定ENGINE=MyISAM。

B.2 创建样例表

为了学习各个例子,需要一组填充了数据的表。所需要获得和运行的一切东西都可以在http://www.forta.com/books/0672327120/ 上找到。
此网页包含两个可以下载的SQL脚本文件。

  • create.sql包含创建6个数据库表(包含所有主键和外键约束)的MySQL语句。
  • populate.sql包含用来填充这些表的INSERT语句。
仅对于MySQL 可下载的.sql文件中的SQL语句是DBMS专用的,它们仅用于MySQL。
这两个脚本用MySQL 4.1和MySQL 5进行了广泛的测试,但没有用更早的MySQL版本进行测试。

(zifeiy:因为我用的是MySQL 8,MySQL 8好像没有默认带MyISAM引擎,所以并不确定在实际操作过程中是否会出现问题,在此注释以下,接下来在运行这两个sql脚本文件的时候会进行相应的补充)

在下载了脚本后,可用它们创建和填充本书各章所用的表。以下是要遵循的步骤。

  1. 创建一个新数据源(为安全考虑,不要使用已有的数据源)。最简单的办法是使用MySQL Administrator(第2章中描述)(zifeiy: 客户端推荐DBEaver)
  2. 保证选择新数据源(如果使用mysql命令行实用程序,用USE命令;如果使用MySQL Query Browser,则直接选择相应的数据源)。
  3. 执行create.sql脚本。如果使用mysql命令行实用程序,可给出source create.sql;(指定create.sql文件的完全路径)。如果使用MySQL Query Browser,选择File,Open Script,create.sql,然后单击Execute按钮。
  4. 重复上面的步骤,用populate.sql文件填充各个新表。
创建,然后填充 必须在运行表填充脚本之前运行表创建脚本。一定要查看这些脚本返回的错误消息。如果创建脚本失败,则在进行表填充之前需要解决可能存在的问题。

《MySQL必知必会》学习笔记——附录B 样例表的更多相关文章

  1. 《MySQL必知必会》学习笔记——附录A MySQL入门

    附录A MySQL入门 如果你是MySQL的初学者,本附录是一些需要的基础知识. A.1 你需要什么 为使用MySQL和学习本书中各章的内容,你需要访问MySQL服务器和客户机应用(用来访问服务器的软 ...

  2. 《MySQL必知必会》学习笔记——前言

    前言 MySQL已经成为世界上最受欢迎的数据库管理系统之一.无论是用在小型开发项目上,还是用来构建那些声名显赫的网站,MySQL都证明了自己是个稳定.可靠.快速.可信的系统,足以胜任任何数据存储业务的 ...

  3. 《MySQL必知必会》学习笔记整理

    简介 此笔记只包含<MySQL必知必会>中部分章节的整理笔记.这部分章节主要是一些在<SQL必知必会>中并未讲解的独属于 MySQL 数据库的一些特性,如正则表达式.全文本搜索 ...

  4. 《MySQL必知必会》学习笔记——第1章 了解SQL

    第1章 了解SQL 本章将介绍数据库和SQL,它们是学习MySQL的先决条件. 1.1 数据库基础 你正在阅读本书,这表明你需要以某种方式与数据库打交道.在深入学习MySQL及其SQL语言的实现之前, ...

  5. 《mysql必知必会》读书笔记--存储过程的使用

    以前对mysql的认识与应用只是停留在增删改查的阶段,最近正好在学习mysql相关内容,看了一本书叫做<MySQL必知必会>,看了之后对MySQL的高级用法有了一定的了解.以下内容只当读书 ...

  6. MySQL必知必会(第4版)整理笔记

    参考书籍: BookName:<SQL必知必会(第4版)> BookName:<Mysql必知必会(第4版)> Author: Ben Forta 说明:本书学习笔记 1.了解 ...

  7. MySQL必知必会1-20章读书笔记

    MySQL备忘 目录 目录 使用MySQL 检索数据 排序检索数据 过滤数据 数据过滤 用通配符进行过滤 用正则表达式进行搜索 创建计算字段 使用数据处理函数 数值处理函数 汇总数据 分组数据 使用子 ...

  8. 《SQL必知必会》学习笔记二)

    <SQL必知必会>学习笔记(二) 咱们接着上一篇的内容继续.这一篇主要回顾子查询,联合查询,复制表这三类内容. 上一部分基本上都是简单的Select查询,即从单个数据库表中检索数据的单条语 ...

  9. 《SQL必知必会》学习笔记整理

    简介 本笔记目前已包含 <SQL必知必会>中的所有章节. 我在整理笔记时所考虑的是:在笔记记完后,当我需要查找某个知识点时,不需要到书中去找,只需查看笔记即可找到相关知识点.因此在整理笔记 ...

随机推荐

  1. 2019红帽杯部分wp

    xx 程序首先取输入的前4个字符作为xxtea加密的密钥之后进行xxtea加密.接着进行位置置换操作,然后又进行了以3个为一组的异或 首先逆向解出xxtea加密之后的结果 #include<st ...

  2. SIGAI机器学习第二十集 AdaBoost算法1

    讲授Boosting算法的原理,AdaBoost算法的基本概念,训练算法,与随机森林的比较,训练误差分析,广义加法模型,指数损失函数,训练算法的推导,弱分类器的选择,样本权重削减,实际应用 AdaBo ...

  3. 机器学习-- 入门demo1 k临近算法

    1.k-近邻法简介 k近邻法(k-nearest neighbor, k-NN)是1967年由Cover T和Hart P提出的一种基本分类与回归方法. 它的工作原理是:存在一个样本数据集合,也称作为 ...

  4. php+ ueditor word粘贴上传

    最近公司做项目需要实现一个功能,在网页富文本编辑器中实现粘贴Word图文的功能. 我们在网站中使用的Web编辑器比较多,都是根据用户需求来选择的.目前还没有固定哪一个编辑器 有时候用的是UEditor ...

  5. Memcached 与 Redis 区别

    一.问题:     数据库表数据量极大(千万条),要求让服务器更加快速地响应用户的需求.   二.解决方案:      1.通过高速服务器Cache缓存数据库数据      2.内存数据库     ( ...

  6. datagrid其中某列需要动态隐藏或显示的mvvm绑定方式,也可以用在其他表格类型控件上

    版权归原作者所有. 引用地址 [WPF] HOW TO BIND TO DATA WHEN THE DATACONTEXT IS NOT INHERITED MARCH 21, 2011 THOMAS ...

  7. svn乌龟怎么用

    0601 首先右键SVN-checkout 0602 其他地方可以不用修改,Version处可以修改,表示从指定版本号开始,点击OK. 0603 就会直接下载,如果改变的话,就会由绿色变成红色. 06 ...

  8. EM算法 学习笔记

    转载请注明出处: http://www.cnblogs.com/gufeiyang 首先考虑这么一个问题.操场东边有100个男生,他们的身高符合高斯分布.操场西边有100个女生,她们的身高也符合高斯分 ...

  9. jQuery学习笔记——基本了解

    安装 两种方法: 从 jquery.com 下载jQuery. 从 CDN 中载入 jQuery, 如从我的博客中加载 jQuery: <script src="https://blo ...

  10. 深入理解JVM虚拟机12:JVM性能管理神器VisualVM介绍与实战

    一.VisualVM是什么? VisualVM是一款免费的JAVA虚拟机图形化监控分析工具. 1.  拥有图形化的监控界面.    2. 提供本地.远程的JVM监控分析功能.    3. 是一款免费的 ...